【发布时间】:2019-03-18 21:40:03
【问题描述】:
我是位操作的新手,我偶然发现了一些有趣的东西。假设如下:
unsigned char A;
unsigned char B;
if(A & 1 << 0){
//testing
}
为什么总是需要variable & 1<<0?
是否有不需要这样做的情况?
假设我们有:
unsigned char temp;
temp = ~A & ~B;
我们正在寻找测试温度。单独测试 temp 与仅使用 temp & 1<<0 测试位 0 有什么区别?
谢谢!
【问题讨论】:
-
谁告诉你一定要那样做的?
-
这从来都不是必需的,我宁愿不鼓励这样做。这是毫无意义的,并且会使您的代码难以理解。如果你想检查你的变量的奇怪性,那么只需测试
x & 1 -
1 << 0有时用于代码一致性,在测试多个位时,例如。 G。if(A & 1 << 0){/*foo*/} else if(A & 1 << 1){/*bar*}。当您在新行上编写每个测试时,测试看起来会更加一致。 -
明白你显示的是UB,因为你的变量都没有被初始化。
-
@yano 这显然是一个伪代码示例,他不是询问测试结果,而是询问是否需要左移。
A和B未定义/已定义不会改变任何事情。别吹毛求疵了。
标签: c bitwise-operators bitwise-and