unsigned char port = 0x5a;
unsigned char result_8;
result_8 = (~port)>>4;
在网上参考的文章,在arm下。(~port)运算时,port会提升为int型,运算结果result_8 = 0xfa;
实际上,在IAR编程环境中,当所选处理器架构为ARM7时result_8 = 0xfa;当处理器架构为cortex-M3时result_8时result_8 = 0x0a;
对于第一种结果,(四十八)解释:当出现在表达式里时,有符号和无符号的char和short类型都将自动被转换为int类型。
对于第二种情况,汇编代码如下所示
MOVSR0,#90
UBFX R2,R0,#4,#4
EROS.WR2,R2,#15
UXTBR2,R2
MOVS R1,R2
UBFX R2,R0,#4,#4指令后R0=0X00000005;
EROS.WR2,R2,#15 指令之后R2 = 0X0000000A;
其中UBFX为无符号位提取指令
UBFX.W Rd,Rn,#lsb,#width
从Rn中提取从lsb开始width宽度的位数。
ERO 为按位异或指令
EOR.WRd,Rn,#imm12
=>Rd = Rn ^imm12
不知出现这种情况,望了解的人解释下。