在按位操作方面我是新手,偶然发现了一些有趣的东西。假设以下内容:
unsigned char A;
unsigned char B;
if(A & 1 << 0){
//testing
}
为什么总是需要拥有variable & 1<<0
?
是否有不需要的情况?
假设我们有:
unsigned char temp;
temp = ~A & ~B;
,我们正在寻求测试温度。单独测试温度与仅使用temp & 1<<0
仅测试位0有什么区别?
谢谢!
答案 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
,所以这完全取决于您,您想使用它取决于代码和您的编码风格。