位移的计算

一、位运算一般用于2的次幂算法中,比乘除速度快
 1、左移
 比如:3<<1  将3的二进制数向左移1位,后面空缺补0------直接可运算为:3*2的1次幂 = 6
    4<<2  就是4*2的2次幂=16
 2、右移
 比如:6>>1  将6的二进制数向右移1位,那么前面空缺的就补0或1,这取决于开始时最前面的那个数保持一致就可以,因为二进制中最前位0表示正数,1表示负数
    6>>1  直接可运算为:6/2的1次幂 = 3
 3、无符号右移
 比如:6>>>1  将6的二进制数向右移1位,那么前面空缺的就补0
 
 示例如下:
 
 24<<3  :24的二进制是00000000 00000000 00000000 00011000,向左移3位且末尾需要0补齐空缺,00000 00000000 00000000 00011000000,十进制为192
          可简化为 24*2的3次幂=192
 6>>1   : 6的二进制是 00000000 00000000 00000000 00000110,向右移1位且保持最高位数不变, 000000000 00000000 00000000 0000011,十进制为3
          可简化为 6/2的1次幂 = 3
 24>>>3 : 24的二进制是00000000 00000000 00000000 00011000,向右移3位且最高位需要0补齐空缺, 00000000000 00000000 00000000 00011 ,十进制为3
   

二、负数的二进制表示
    以正数的补码形式表示
   补码:原码转反码再加1
   比如:6的二进制是00000000 00000000 00000000 00000110
          反码就是  11111111 11111111 11111111 11111001
          补码就是  11111111 11111111 11111111 11111010  表示-6
  
   示例如下:
  
   -6>>>1 :6的二进制是 00000000 00000000 00000000 00000110
    反码就是   11111111 11111111 11111111 11111001
    补码就是   11111111 11111111 11111111 11111010  表示-6 向右移1位且最高位补0 ,就是011111111 11111111 11111111 1111101,十进制就是2147483645

posted @ 2014-02-14 15:05  徽州猿人  阅读(675)  评论(0编辑  收藏  举报