- 左移运算符 << :把一个数的所有位都向左移动若干位
为了理解方便,假设 int 占1个字节(8位,实际32位机器占4字节,32位)
此时需要注意的是 int 类型 最左端的符号位
0 表示 正
1 表示 负
当左移的位数超过该数值类型的最大位数时,编译器会用左移的位数去模类型的最大位数,然后按余数进行移位,如:
总结:丢弃高位,0补低位
- 右移运算符 >> :把一个数的所有位都向左移动若干位
符号位向右移动后,正数补0,负数补1,也就是汇编语言中的算术右移,同样当移动的位数超过类型的长度时,会取余数,余数是几,移动几位
整型 int 为4个字节32位,那么当我们右移32位会发生什么?35位呢?
这是因为位移是一个取模的过程
当我们右移4位:4 % 32 = 4
当我们右移32位:32 % 32 = 0 也就是不动
那么当右移33位,那不就是右移1位吗!
- 无符号右移(没有无符号左移)
无符号右移在右移时,高位补0,也就是不会管你是不是负数
-10 >>> 1
二进制: 0 | 0
是这样吗?答案是对的,负数无符号右移,高位同样补0
无符号右移1位后最高位的1变为了0,负数变为了正数
总结
负数右移高位补1
无符号负数高位补0
eg 小测验:
- 总结
码制添补代码正数原码、补码、反码0负数原码0补码左移添0右移添1反码1
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.mushiming.com/mjsbk/7627.html