用&1 << 0测试值?

问题描述 投票:1回答:1

当涉及到有点操作时,我是新手,我偶然发现了一些有趣的东西。假设如下:

unsigned char A;
unsigned char B;

if(A & 1 << 0){
    //testing
}

为什么总是需要有variable & 1<<0?是否有这种情况不需要?假设我们有:

unsigned char temp;
temp = ~A & ~B;

我们正在寻找测试温度。测试温度本身与使用temp & 1<<0仅测试第0位有什么区别?

谢谢!

c bitwise-operators bitwise-and
1个回答
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,因此根据代码和编码风格,完全由您决定。

© www.soinside.com 2019 - 2024. All rights reserved.