首页 > 解决方案 > 将所有位设置为最低有效位

问题描述

如果我有一个xtype int,我怎样才能得到x's LSB 的值并将数字中的所有其他位设置为该 LSB?

我一直在搞乱按位和逻辑运算符(不是双关语),我了解它们的功能。

移位运算符x >> 3x << 3x 的位分别向左和向右移动三个空格,我知道我们可以使用和 之类的运算符^ |&搞乱位操作。我无法理解这个特定问题的逻辑。

编辑:我们被允许使用的运算符是!~ & ^ | + << >>

标签: cbinarybit-manipulation

解决方案


从字面上看:

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变量。)

https://gcc.godbolt.org/z/2NXFpS


推荐阅读