关于移位操作

来源:互联网 发布:js执行a标签点击事件 编辑:程序博客网 时间:2024/05/18 09:08

左移:不管是有符号数还是无符号数,数位都往左移动n位,右边用0补足。如果左移的位数超过整数本身的位数,结果不知道。VS上测试结果是从头开始。

例子(VS,32位机器):

int类型,原始值0x1,左移31位后是0x80000000。左移32位后是0x1。原始值0x11,左移31位后是0x80000000,左移32位后是0x11。

unsigned int类型,同上。


右移:右移包括逻辑右移和算术右移。对于无符号数,只有逻辑右移,对于有符号数,可以逻辑右移,也可以算术右移,具体的实现因编译器的不同而不同。

逻辑右移是在左端补0,算术右移是在左端补符号位,如果是正数就补0,如果是负数就补1。

在本机上做实验,对于无符号数,采用算术右移。

例子:

unsigned int类型,原始值0x80000000,右移一次为0x40000000。

int类型,原始值0x80000000,右移一次为0xC0000000。

如果移位位数超过整数本身的位数,结果从头开始。同左移。

原创粉丝点击