由右移运算符引发的思考(计算机原理)

输出 -50>>5,得到-2
输出 -50/32得到-1

思考是如何在计算机内部实现的??
首先需要知道:计算机中所有数都是以补码形式存储的。
简单说一下符号位0为正,1为负。移码相反。
50的二进制是110010,那么-50的表示如下

  1. 原码:1110010,即在二进制前面加上符号位
  2. 反码:1001101,符号位不变,其他位取反
  3. 补码:1001110,反码+1即补码。

所以-50在计算机内部存储是1001110,向右移动5位,为了保持符号位不变,前面填1,所以变为1111110
我们将这个补码变为原码,得到1000010,正是-2!!
右移带符号,左移不需要。(左移往后面填0,不考虑符号位)
-50向左移动2位,输出的是-200。我们算一下:

  1. 左移2位,得到100111000
  2. 化为原码111001000,正好是-200

总结:右移位就是向下取整。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章