美文网首页JAVA&python学习之路
位运算:负数右移与无符号右移运算小结

位运算:负数右移与无符号右移运算小结

作者: 梦小琪 | 来源:发表于2019-03-28 10:00 被阅读0次

该作者讲述的很详细。

对于带符号右移,若为负数,则在存储时首位表示符号位,其值为1,表示该值是负数的移位,在移位过程中,高位补1,若符号位是0,表示是正数,在移位过程中高位补零,两者的前提是符号位保持不变:

        对于负数的右移:因为负数在内存中是以补码形式存在的,所有首先根据负数的原码求出负数的补码(符号位不变,其余位按照原码取反加1),然后保证符号位不变,其余位向右移动到X位,在移动的过程中,高位补1.等移位完成以后,然后保持符号位不变,其余按位取反加1,得到移位后所对应数的原码。即为所求。

       举例1:

                   -100带符号右移4位。-100二进制转换为:1100100

                   -100原码:   10000000    00000000    00000000   01100100

                   -100补码:    保证符号位不变,其余位置取反加1

                                         11111111    11111111    11111111       10011100

                   右移4位   :   在高位补1

                                         11111111    11111111    11111111      11111001

                                 补码形式的移位完成后,结果不是移位后的结果,要根据补码写出原码才是我们所求的结果。其方法如下:

                    保留符号位,然后按位取反

                                         10000000    00000000    00000000     00000110

                    然后加1,即为所求数的原码:

                                          10000000    00000000    00000000    00000111

                         所有结果为:-7

                  举例2:

                            -100无符号右移4位。

                   -100原码:   10000000    00000000    00000000   01100100

                   -100补码:    保证符号位不变,其余位置取反加1

                                         11111111    11111111    11111111   10011100

                   无符号右移4位   :   在高位补0

                                         00001111    11111111    11111111    11111001

                  即为所求:268435449

总结:

负数的无符号右移就是相应的补码移位所得,在高位补0即可。

负数的右移,就是补码高位补1,然后按位取反加1即可。

---------------------

作者:等你看完风景

来源:CSDN

原文:https://blog.csdn.net/king_msky/article/details/17221973

相关文章

  • 位运算:负数右移与无符号右移运算小结

    该作者讲述的很详细。 对于带符号右移,若为负数,则在存储时首位表示符号位,其值为1,表示该值是负数的移位,在移位过...

  • 秒懂左移右移运算符

    左移运算符 << 右移运算符 带符号右移 >> 无符号右移 >>> 对于正数来说和带符号右移相同,对于负数来说不同...

  • 二进制基础

    二进制转十进制 十进制转二进制 八进制转二进制 二进制的位运算 关于负数的右移与无符号右移运算小结

  • 位运算

    Java提供的位运算符有:左移( << )、右移( >> ) 、无符号右移( >>> ) 、位与( & ) 、位或...

  • java 三种运算符理解

    >> : 右移运算符;低位移出,符号位不变 << : 左移运算符;高位移出,符号位不变 >>> : 无符号右移; ...

  • Java 位运算

    本文主要介绍 Java 提供的位运算符:左移( << )、右移( >> ) 、无符号右移( >>> ) 、位与( ...

  • 与运算

    与运算 " >>>" 无符号右移 ">>" 有符号右移 区别:无符号右移会给最高位补上0,而有符号右移则看原来最...

  • Java位运算

    Java常用的位运算: 带符号右移 >> 对于正数, 带符号右移 >> 会把所有的位右移,并在最前面补0对于负数,...

  • 面试精选之位操作问题集锦

    Java 中位运算符有与(&)、或(|)、非(~)、异或(^)、左移(<<)、右移(>>)、无符号右移(>>>),...

  • 位移运算

    位移运算 无符号位移 >>> 无符号右移,无符号位运算用 0 补位 <<< 无符号左移 带符号位移 >> 带符号...

网友评论

    本文标题:位运算:负数右移与无符号右移运算小结

    本文链接:https://www.haomeiwen.com/subject/fbmfbqtx.html