当前位置: 代码迷 >> Web前端 >> java位演算
  详细解决方案

java位演算

热度:199   发布时间:2012-09-12 09:21:30.0
java位运算
   java位运算主要是用来对二进制进行操作,主要的位运算包括>>,<<,>>>,&,|,^,~ .java的二进制是采用补码(最高阶0表示正 ,1表示负,对正数来说,最高位为0,其余各位代表数值本身,如 +22的补码 为00010110。 对负数而言最高位1,把该数绝对值的补码按位取反 然后对整个数加1,即得该数的补码,如 -22的补 码 为11101010(00010110 按位取反11101001 +1=11101010))的方式进行表示.
    1, >>  右移(带符号【移动的时候带上原来的符号】)
    a>>b 表示a向右移动b位,低阶去掉,高阶用原来最高阶补充(即如果原来最高位0,则高位补0),
    例如: 12>>2   即00001100--->00000011(3)
         -12>>2   即11110100--->11111101(-3)
    2, <<  左移(带符号)
    a<<b 表示a向左移动b位,高阶去掉,低阶用0补充。
    例如: 12<<2   即00001100--->00110000(48)
         -12<<2   即11110100--->11010000(-48)
         
    3, >>> 右移(无符号【移动的时候不带上原来的符号】)
    由于>>>是无符号的,所以每次移动最高位用0表示,所以>>>结果一定是正数(除0),即正数的>>>跟>>结果是一样的
    例如: 12>>>2 即00001100--->00000011(3)
         -12>>>2 即11110100--->00111101 (1073741821)

    4, &  按位与
       如果两个运算数都是1,则结果为1。其他情况下,结果均为零
       例如:01010001&11000011结果为:01000001
    5,|  按位或
       任何一个运算数为1,则结果为1
       例如:01010001|11000011结果为: 11010011
    6, ^ 按位异或
       只有在两个比较的位不同时其结果是 1。否则,结果是零
       例如:01010001|11000011结果为: 10010010
    7, ~ 按位非
       是对其运算数的每一位取反
       ~01010001 结果为:10101110
备注:操作的数据为byte类型,在内存占一个字节即8位2进制数表示
  相关解决方案