c - 将所有位设置为最低有效位
问题描述
如果我有一个x
type int
,我怎样才能得到x
's LSB 的值并将数字中的所有其他位设置为该 LSB?
我一直在搞乱按位和逻辑运算符(不是双关语),我了解它们的功能。
移位运算符x >> 3
和x << 3
x 的位分别向左和向右移动三个空格,我知道我们可以使用和 之类的运算符^
|
来&
搞乱位操作。我无法理解这个特定问题的逻辑。
编辑:我们被允许使用的运算符是!~ & ^ | + << >>
解决方案
从字面上看:
type x /*=some value*/;
_Bool lsb = x&1;
x = lsb ? ~(type)0 : (type)0;
在 2 的补码架构上优化编译器使其无分支并等效于:
type x /*=some value*/;
_Bool lsb = x&1;
x = -lsb;
(或-(x&1)
没有中间lsb
变量。)
推荐阅读
- javascript - 在 ReactJS 和 ExpressJS 上过滤数组打印(显示)
- python - 转换 DataFrame 中的每个组
- powershell - 使用 Powershell 运行 Cake 脚本时 Jenkins 出现未知命令错误
- monetdb - monetdbe:读取与写入的多个连接
- oop - Kotlin 中的封装
- oracle - Oracle:对相同 id 但不同组的单元格值求和
- android - 定期擦除 Android 密钥库密钥
- domain-driven-design - 以简化的 DDD/CQS 模式读取模型/聚合代码组织,其中需要从其他域读取模型
- delphi - 保存整数值以在多个过程中使用
- reactjs - 未处理的拒绝 (TypeError):fs.createWriteStream 不是函数