用&1 << 0测试值?

时间:2019-03-18 21:40:04

标签: c bitwise-operators bitwise-and

在按位操作方面我是新手,偶然发现了一些有趣的东西。假设以下内容:

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 :(得分:2)

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