C语言中无符号数和有符号数的左移和右移 |
您所在的位置:网站首页 › 左移右移运算符号是什么 › C语言中无符号数和有符号数的左移和右移 |
在单片机开发中,通常会使用左移和右移操作做快速的乘法和除法运算。 例如,将0x0001左移1位,相当于乘以2^1左移2位相当于乘以2^2,以此类推,左移n位,相当于乘以2^n。右移则相当于除以2^n。 那么对于无符号数和有符号数,对于左移和右移的操作分别是如何呢?下面通过实验来进行验证: 对于无符号数的左移和右移,代码片段如下: void main(void){ static UINT16 sTemp; sTemp = 0x0001; sTemp = sTemp 1; sTemp = 0xFFFF; sTemp = sTemp >> 1; while(1); }仿真运行结果: sTemp = 0x0001; sTemp = sTemp > 1;执行右移后,sTemp的值为0x0200 0000010000000000B --> 0000001000000000B 可见:无符号数执行右移策略是丢弃最低位,高位补0 sTemp = 0xFFFF; sTemp = sTemp >> 1;执行右移后,sTemp的值为0x7FFF 1111111111111111B --> 0111111111111111B 右移策略与前面相同。 对于有符号数,测试代码如下: void main(void){ static INT16 sTemp; sTemp = 0x0001; sTemp = sTemp 1; sTemp = 0x8000; sTemp = sTemp 1;有符号数,符号位为1,执行右移操作 sTemp值变为0xC000 1000000000000000B --> 1100000000000000B 可见有符号数右移,符号位为1时,执行右移,舍弃低位,高位补1. sTemp = 0x8000; sTemp = sTemp |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |