关于移位操作

左移:不管是有符号数还是无符号数,数位都往左移动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。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值