输出 -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
总结:右移位就是向下取整。