移位运算

          这是大学时学的知识点了,好像是组成原理或者系统工程里讲的,忘记了,只记得是理工大学的一个女老师讲的,好几门课都是她给讲的。

          恰巧翻翻hashmap原码,有个移位运算的作用忘了,复习一下;

         1.原码、反码、补码

               以单字节,8位为例:

               最大值是2的7次方-1,2进制表示为01111111.不是8个1,因为首位是符号位,1代表负数。

                比如15 ,二进制为 00001111,正数的原码、反码、补码都是一样的

                比如-15,二进制为 10001111,

                原码:10001111,反码:11110000 补码:11110001.

                结论:正数的原码、反码、补码都一样,负数的反码是按位取反,补码是取反后+1.

               程序中用于计算的全是补码:

         

            

 

            2.移位运算

            java中 有 逻辑左移<<   逻辑右移>>    无符号右移>>> 三个。

            规则:逻辑左移右补0,逻辑右移左边补符号位;无符号右移左补0,不区分正负

            15:                 00001111

                 左移一位:00011110

                 右移一位:00000111

     无符号右移一位 :00000111

            -15:              11110001

                 左移一位:11100010

                 右移一位:11111000

      无符号右移一位:01111000

      

 

            

 

 

 

                 

posted on 2019-02-28 17:35  薛占奎  阅读(1656)  评论(0)    收藏  举报