使用 & 1<<0 测试值?

Testing values with & 1<<0?

我是位运算的新手,我偶然发现了一些有趣的东西。假设如下:

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,所以这完全取决于您想要根据代码和您的编码风格使用。