有符号整数的移位操作(按其补码移位规则进行操作)

本文详细阐述了有符号整数在进行位运算时的规则,包括左移(<<)和右移(>>)操作。左移时,无论正负,空出位都补0;右移时,正数补0,负数补1。同时提到了当左移位数超过数值类型最大位数时的处理方式,并介绍了正数和负数的原码、反码和补码表示。
摘要由CSDN通过智能技术生成

【知识点】
算法运行时,输入的整数
默认情况下被计算机系统表示为有符号整数。有符号整数的二进制表示中,最高位为符号位(正整数为0,负整数为1),这也是有符号整数名称的由来。有符号整数移位时,按照补码的移位规则进行移位。即:

当有符号整数进行位运算“
左移(<<)”时,规则是“符号位不变,移出位丢弃,空出位补0”。即正整数左移N位时低位依次填充N个0,负整数左移N位时低位依次填充N个0。例如:
0000 0010 << 1 = 0000 0100  
0000 1010 << 2 = 0010 1000 
1000 0010 << 1 = 1100 0100   
1000 1010 << 3 = 1101 0000

当有符号整数进行位运算“
右移(>>)”时,规则是“符号位不变,移出位丢弃,空出位补符号位”。即正整数右移N位时高位依次填充N个0,负整数右移N位时高位依次填充N个1。例如:
0000 0010 >> 1 = 0000 0001  
0000 1010 >> 2 = 0000 0010 
1000 0010 >> 1 = 1100 0001   
1000 1010 >> 3 = 1111 0001

或者,总结为“当有符号整数进行位运算“
左移(<<)”时,规则是“符号位不变,移出位丢弃,空出位补0”。当有符号整数进行位运算“右移(>>)”时,规则是“符号位不变,移出位丢弃,空出位补符号位”。

--------------------------------------------------------
左移的特殊情况:
左移里一个比较特殊的情况是当左移的位数超过该数值类型的最大位数时,编译器会用左移的位数去模类型的最大位数,然后按余数进行移位。如:
int i=1; //设int为32位
i=i<<33; // 33%32=1,左移1位,i变成2

正数的反码等于其原码。正数的补码等于其原码。 负数的反码等于对负数原码符号位以外的各位取反(0变1,1变0)。负数的补码等于负数反码加1。

 

【参考文献】
https://blog.csdn.net/WUYAN889/article/details/106099693
https://blog.csdn.net/hnjzsyjyj/article/details/110148954

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值