当涉及到有点操作时,我是新手,我偶然发现了一些有趣的东西。假设如下:
unsigned char A;
unsigned char B;
if(A & 1 << 0){
//testing
}
为什么总是需要有variable & 1<<0
?是否有这种情况不需要?假设我们有:
unsigned char temp;
temp = ~A & ~B;
我们正在寻找测试温度。测试温度本身与使用temp & 1<<0
仅测试第0位有什么区别?
谢谢!
1<<0
毫无意义,移位1左零位无效。
1<<0 == 1
以下内容相同
unsigned char A;
unsigned char B;
if(A & 1){
//testing
}
这是一个单一的&
,这使得这是一个有点明智的操作,而不是左移(<<
)操作
例如,如果你想测试第7位,你可以采取两种方式:
if (A & 128) {
要么
if (A & (1<<7)) {
在后者的情况下,因为它使用常量值,编译器会将其简化为128
并完全避免使用shl
,因此根据代码和编码风格,完全由您决定。