美文网首页
位运算符

位运算符

作者: xdoyf | 来源:发表于2017-12-15 13:34 被阅读0次

    Java 位运算符

    在Java中存在着这样一类操作符,是针对二进制进行操作的。它们各自是&、|、^、~、>>、<<、>>>几个位操作符。不管是初始值是依照何种进制,都会换算成二进制进行位

    操作。接下来对这几种操作符进行一下简单的解说。

    &:
    
    作用是对运算符两側以二进制表达的操作符按位分别进行'与'运算。
    而这一运算是以数中同样的位(bit)为单位的。操作的规则是:仅当两个操作数都为1时。输出结果才为1,否则为0。
    
       12 的二进制为 1100
       5   的二进制为 0101
    
    则 12 & 5 的二进制为 0100,则完整的运算式为 12 & 5 = 4; 
    
    |:
    
    作用是对运算符两側以二进制表达的操作符按位分别进行'或'运算。而这一运算是以数中同样的位(bit)为单位的。
    操作的规则是:仅当两个操作数都为0时,输出的结果才为0。否则为1,示比例如以下:
    
    12 的二进制为 1100
    5   的二进制为 0101
    
    则 12 | 5 的二进制为 1101。则完整的运算式为 12 & 5 = 13; 
    
    ^:
    
    作用是对运算符两側以二进制表达的操作数按位分别进行'异或'运算,而这一运算是以数中同样的位(bit)为单位的。
    异或运算操作的规则是:仅当两个操作数不同一时候。对应的输出结果才为1,否则为0,示比例如以下:
    
    12 的二进制为 1100
    5   的二进制为 0101
    
    则 12 | 5 的二进制为 1001。则完整的运算式为 12 & 5 = 9; 
    
    ~:
    
    '取反'运算符~的作用是将各位数字取反:全部的0置为1,1置为0,示比例如以下:
    
    12 的二进制为 1100
    
    进行取反操作为 10000000 00000000 00000000 00001101
    
    则完整的运算式为
    ~12 = -13
    
    <<:
    
    左移就是把一个数的全部位数都向左移动若干位,示比例如以下:
    
    12 的二进制为 1100
    
    则 12 << 1 的二进制为 11000, 则完整的运算式为 12 << 1 = 24;
    
    >>:
    
    右移就是把一个数的全部位数都向右移动若干位,示比例如以下:
    
    12 的二进制为 1100
    
    则 12 >> 1 的二进制为 0110。 则完整的运算式为 12 >> 1 = 6;
    >>>:
    
    无符号右移一位。不足的补0。 示比例如以下:
    
    12 的二进制为 1100
    
    则 12 >> >1 的二进制为 0110, 则完整的运算式为 12 >> 1 = 6;
    
    >>>是无符号右移,在高位补零
    
    >>是带符号的右移,如果是正数则在高位补零,负数则补1
    

    题外话:位运算是一种基于二进制的运算,涉及到知识包含原码、反码、补码,在此做一个小小的说明,

    对于原码。就是当前数字的二进制表现形式,如-1的原码是1000 0001。

    对于反码,正数的反码就是本身。负数的反码是二进制保留符号位。剩余位取反,比如-1的反码是1111 1110;

    对于补码,正数的反码、补码、原码都是一样的,负数的补码是在其反码的基础上+1,比如-1的补码是1111 1111。

    在JDK的原码中。有很多初始值都是通过位运算计算的,位运算有很多特性,能够在线性增长的数据中起到作用。且对于一些运算,位运算是最直接、最简便的方法。

    相关文章

      网友评论

          本文标题:位运算符

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