一个类型转换的讨论

来源:互联网 发布:leetcode面试题js 编辑:程序博客网 时间:2024/05/29 18:23
 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,#90UBFX R2R0#4,#4EROS.WR2,R2#15UXTBR2,R2MOVS R1R2UBFX R2R0#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

不知出现这种情况,望了解的人解释下。

0 0
原创粉丝点击