从上面的问题的答案中我完全理解了零填充右移的概念.但是当我试图找到-1>> 1时,我得到一个完全复杂的答案,我觉得很难理解.
-1 in binary form is as follows: 11111111111111111111111111111111
After flipping the bits, I got: 00000000000000000000000000000000
Upon adding 1 to it, I got: 00000000000000000000000000000001
Now shifting one position right: 00000000000000000000000000000000
After flipping the bits, I got: 11111111111111111111111111111111
Now adding 1 to it: 00000000000000000000000000000000
我不明白-1>> 1是-1本身,然后呢?
解决方法:
当执行一个正常的右移位(即,使用与GT;>中也称为一个算术右移,而不是到大于;>>中,其是一个逻辑右移),数目为符号扩展.
这是如何工作的如下:
当我们右移时,我们在数字前面得到一个空位,如下所示:
11111111111111111111111111111111
?1111111111111111111111111111111(1) (right-shift it one place)
最后一个被移出,并且来了?
现在,我们如何填写?取决于我们如何转变.
如果我们进行逻辑移位(即>>>),我们只需用0填充它.
如果我们做了算术移位(即>&1+),我们有从原来的数的第一位,即,符号位(因为它是1,如果该数是负的,而0如果不)填充.这称为符号扩展.
因此,在这种情况下,-1>> 1符号 – 将1扩展到?,保留原始-1.
进一步阅读:
标签:java,bit-manipulation
来源: https://codeday.me/bug/20190517/1120865.html