如果我有一个int类型的x,我如何获取x的LSB的值并将该数字中的所有其他位都设置为该LSB?
我已经使用位运算符和逻辑运算符有一段时间了(不是双关语),我理解它们是如何工作的。
移位运算符x >> 3和x << 3将x的位分别向左和向右移动三个空格,我知道我们可以使用像^ |和&这样的运算符来处理位。我很难理解这个特定问题的逻辑。
编辑:允许我们为此使用的运算符是!~&^|+ << >>
发布于 2019-01-30 05:28:14
字面意思是:
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;(或者不带中间lsb变量的-(x&1)。)
发布于 2019-01-30 05:46:09
如果(x & 1) {x = 4294967295 }否则{x=0}。换句话说,如果x是奇数,则LSB为1,因此将x设置为可能的最大32位无符号整数(所有位均设置为1),否则,如果x为偶数,则LSB为0,因此将x设置为0。但等等,它是一个有符号整数,将所有位设置为1将意味着有符号位已设置。因此,将其更改为: if (x & 1) {x= -1 } else {x=0}。正如尤金所评论的那样,我们可以只使用-(x & 1)。
发布于 2019-01-30 06:05:04
你们都认为-但最近我正在帮助检查学生和问题-找到LSB或LSB的值意味着数字中设置的最低位。这会让任务变得不那么琐碎和明显。
在这种情况下:
获取LSB - z & (~z+1)的值
z = ~(z & (~z+1));https://stackoverflow.com/questions/54429804
复制相似问题