C语言中无符号数和有符号数的左移和右移

您所在的位置:网站首页 左移右移运算符号是什么 C语言中无符号数和有符号数的左移和右移

C语言中无符号数和有符号数的左移和右移

2024-06-02 03:59| 来源: 网络整理| 查看: 265

在单片机开发中,通常会使用左移和右移操作做快速的乘法和除法运算。

例如,将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