C 位运算符比较错误
编译程序:IAR 平台:stm32f4 我有这个代码,但它不工作的预期。 有人能解释为什么C 位运算符比较错误,c,macros,arm,bit,iar,C,Macros,Arm,Bit,Iar,编译程序:IAR 平台:stm32f4 我有这个代码,但它不工作的预期。 有人能解释为什么 #define byteGetbit(x,y) ((x) & (0x01 << (y))) volatile t_uint8 test=0xFF; if(byteGetbit(test,0x03)==1){ //always false printf("hello"); //can't reach the code here test = 0; } byteGetbit
#define byteGetbit(x,y) ((x) & (0x01 << (y)))
volatile t_uint8 test=0xFF;
if(byteGetbit(test,0x03)==1){ //always false
printf("hello"); //can't reach the code here
test = 0;
}
byteGetbit
生成一个具有相应位集或清除的值,因此要测试位集,您必须检查:
if(byteGetbit(test,0x03) == 0x03)
或
byteGetbit
生成一个具有相应位集或清除的值,因此要测试位集,您必须检查:
if(byteGetbit(test,0x03) == 0x03)
或
byteGetbit
生成一个具有相应位集或清除的值,因此要测试位集,您必须检查:
if(byteGetbit(test,0x03) == 0x03)
或
byteGetbit
生成一个具有相应位集或清除的值,因此要测试位集,您必须检查:
if(byteGetbit(test,0x03) == 0x03)
或
((x)和(0x01((x)和(0x01((x)和(0x01)((x)和(0x01)您不读取位,但在其当前位置隔离位
您应该将byteGetbit更改为:
#define byteGetbit(x,y) ((x >> y) & 0x01)
这会将位移到位0,然后将其隔离。您不会读取位,但会将位隔离在其当前位置
您应该将byteGetbit更改为:
#define byteGetbit(x,y) ((x >> y) & 0x01)
这会将位移到位0,然后将其隔离。您不会读取位,但会将位隔离在其当前位置
您应该将byteGetbit更改为:
#define byteGetbit(x,y) ((x >> y) & 0x01)
这会将位移到位0,然后将其隔离。您不会读取位,但会将位隔离在其当前位置
您应该将byteGetbit更改为:
#define byteGetbit(x,y) ((x >> y) & 0x01)
这将把位移到位0,然后将其隔离。printf(“%d\n”,byteGetbit(test,0x03));
@user1111998您的逻辑if(byteGetbit(test,0x03)==1)
和定义byteGetbit(x,y)((x)和(0x01printf(“%d\n”,byteGetbit(test,0x03));
@user1111998您的逻辑if(byteGetbit(test,0x03))=1)
和#定义byteGetbit(x,y)((x)和(0x01printf(“%d\n”,byteGetbit(test,0x03));
@user1111998您的逻辑如果(byteGetbit(test,0x03)==1)
和定义byteGetbit(x,y)((x)和(0x01printf(“%d\n”,byteGetbit(test,0x03));
@userif(byteGetbit,test
和#定义字节位(x,y)((x)和(0x01