输出 -50>>5,得到-2
输出 -50/32得到-1
思考是如何在计算机内部实现的??
首先需要知道:计算机中所有数都是以补码形式存储的。
简单说一下符号位0为正,1为负。移码相反。
50的二进制是110010
,那么-50的表示如下
- 原码:
1110010
,即在二进制前面加上符号位 - 反码:
1001101
,符号位不变,其他位取反 - 补码:
1001110
,反码+1即补码。
所以-50在计算机内部存储是1001110
,向右移动5位,为了保持符号位不变,前面填1,所以变为1111110
。
我们将这个补码变为原码,得到1000010
,正是-2!!
右移带符号,左移不需要。(左移往后面填0,不考虑符号位)
-50向左移动2位,输出的是-200。我们算一下:
- 左移2位,得到
100111000
- 化为原码
111001000
,正好是-200
总结:右移位就是向下取整。