使用 & 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
,所以这完全取决于您想要根据代码和您的编码风格使用。
我是位运算的新手,我偶然发现了一些有趣的东西。假设如下:
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
,所以这完全取决于您想要根据代码和您的编码风格使用。