左移运算符和右移运算符的使用
先简单介绍一下,左移运算符和右移运算符的功能:
计算机中的数字是以二进制补码的形式存放的,而左移和右移运算符就是将内存中的二进制补码数字向左或者右移动。
左移的结果:
1.左移会让最高位溢出(也就是把最高位抛弃)
2.接着向低位补0
注意:无论是正数还是负数左移,最低位都是补0!!!
举个正数左移的栗子:
将10左移2位的代码图:
内存中10左移2位的变化图:
因此最终结果是:40
举个负数左移的栗子:
-10左移2位:
因此,最中结果是:-40
右移的结果:
a.对于正数而言:
1.右移会让最低位溢出(也就是把最低位抛弃)
2.接着向最高位补0
b.对于负数而言:
1.右移会让最低位溢出(也就是把最低位抛弃)
2.接着向最高位补1
注意:正数右移最高位补0,负数右移最高位补1.
举个正数右移的栗子:
10右移2位代码图:
10右移2位内存图:
最终结果:2
举个负数右移的栗子:
-10右移两位代码图:
-10右移2位内存图:
最终结果:2
补充几个奇奇怪怪的小tip:
a. 10<<33(10左移33位),但是10是int类型的,只有32位,按常理来想被移除完那就全部补0吧,错!!! 当移动位数超过最大位数后,系统会进行取余操作,即33%32=1,因此它会左移1位哒,是不是被坑了,哈哈哈哈哈哈哈哈哈哈哈。
补充一点:对于无符号的来说,当移动超过本身位数后就变为0.
b. 10<<-1(10左移-1位),正常来想,左移-1位,那不就是右移1位么,错!!!在系统中,左移-1位等价于左移31位(原因:32位-1位=31位)。
球球了,点个赞,支持一下吧,画图好累......