math - 有没有办法使用位运算符而不是多个三元运算符?
问题描述
有没有办法获得将三元?:
运算符应用于单个位的结果,而无需一次实际计算一个位,即使用and -s,或-s,xor -s,而不是-s 的某种组合?
换句话说,给定我们有 3 个int
s(不管位长): a
、b
和 mask m
,结果r
基本上应该是: r = m ? a : b
,除了每个位。
假设a = 0b0101; b = 0b1110;
和m = 0b0110
,结果r
应该是0b1100
。因此,如果掩码中的第nm
位为1
(真),则使用; 中的第n位a
。否则(如果掩码中的第nm
位为0
(假)),则使用 中的第n位b
。
解决方案
如果m
和a
都b
保证为 0 或 1,则m ? a : b
等价于(m && a) || (!m && b)
。您可以通过在公式中注入m=0
或简化它来看到这一点。m=1
这也可以按位工作;通常注意按位不是~
;所以您正在寻找的“按位三元运算符”可以表示为:
(m&a)|((~m)&b)
推荐阅读
- python - 在流上调用 flush() 后如何知道磁盘何时准备就绪?
- python - 画布上的 Tkinter ttk.Scrollbar 滚动正常,但滚动条小部件显示不正确?
- c++ - 我该如何解决这个问题?错误:找不到库 -lmysqlclient
- python - 如何阻止程序添加文件中已存在的对象?
- python - 如何在 Pygame 中减慢 Sprite FPS?
- ruby - 自动配置:找不到命令
- html - 样式 A 的第一个实例
- 仅元素,不从第二个实例中物理删除样式(并且不添加类或 ID)
- javascript - React Redux- Store 更新前超时
- java - 如何使用 Mockito 填充 POJO
- ruby-on-rails - 如何使用 RSpec Rails 4.0 测试具有特定 url 的 json 格式?