您的位置:首页 > 编程语言 > Java开发

Java中的位运算,包括移位、位与、或、异或、非

2017-12-13 12:09 253 查看
Java中的位运算包括:左移( << )、右移( >> ) 、无符号右移( >>> ) 、位与( & ) 、位或( | )、位非( ~ )、位异或( ^ ),

特别注意:除了位非( ~ )是一元操作符外,其它的都是二元操作符。并且在进行位运算的时候,例如a&b操作,都需要首先把a和b转换成二进制再进行操作

1.位与(&)

规则:a&b,先把十进制数a b都转换为二进制数,&的运算规则是:第一个操作数a的第n位与第二个操作数b的第n位如果都是1,那么结果的第n位也为1,否则为0

举例:5&3

先把5和3都转换为二进制

5---->0000 0000 0000 0000 0000 0000 0000 0101

3---->0000 0000 0000 0000 0000 0000 0000 0011

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

 ----->0000 0000 0000 0000 0000 0000 0000 0001  结果转换为十进制则为1

2.位或(|)

规则:a|b,先把a b都转换为二进制数,|的规则为:第一个操作数a的第n位与第二个操作数b的第n位中只要有一个为1,那么结果的第n位位1,否则为0

举例:5|3

5---->0000 0000 0000 0000 0000 0000 0000 0101

3---->0000 0000 0000 0000 0000 0000 0000 0011

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

 ----->0000 0000 0000 0000 0000 0000 0000 0111  结果转换为十进制为7

3.位非(~)

位非位一元运算符,规则是:操作数的第n位为1则结果第n位为0,第n位为0,则结果第n位为1

举例:5

0000 0000 0000 0000 0000 0000 0000 0101

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

1111 1111 1111 1111 1111  1111  1111 1010  结果为-6

4.位异或( ^ )

规则:第一个操作数的的第n位与第二个操作数的第n位相反,那么结果的第n为也为1,否则为0

举例:5^3

0000 0000 0000 0000 0000 0000 0000 0101

0000 0000 0000 0000 0000 0000 0000 0011

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

0000 0000 0000 0000 0000 0000 0000 0110  结果为6

5.左移运算(<<)

a<<b

规则:将a转换为二进制,所有数向左移动b位,如果a为正数,低位补0,如果a为负数,低位也是补0

例:5<<2

0000 0000 0000 0000 0000 0000 0000 0101

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

0000 0000 0000 0000 0000 0000 0001 0100 结果为20

6.右移运算

a>>b

规则:将a转换为二进制,所有数向右移动b位,如果a为正数,高位补0,如果a为负数,则高位补1

举例:5>>2

0000 0000 0000 0000 0000 0000 0000 0101

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

0000 0000 0000 0000 0000 0000 0000 0001    结果为1

7.无符号右移(>>>)

a>>>b

规则:正数右移,高位用0补,负数右移,高位用1补,当负数使用无符号右移时,都用0进行补位(这样由负数变成了正数了),正数或者负数左移,低位都是用0补

例如  -5换算成二进制后为:

1111 1111 1111 1111 1111 1111 1111 1011
举例:分别对5进行右移3位、 -5进行右移3位和无符号右移3位操作

5---> 0000 0000 0000 0000 0000 0000 0000 0101

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

         0000 0000 0000 0000 0000 0000 0000 0000  结果为0

-5--->1111 1111 1111 1111 1111 1111 1111 1011

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

1111 1111 1111 1111 1111 1111 1111 1111 1111 结果为-1

-5--->1111 1111 1111 1111 1111 1111 1111 1011

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

0001 1111 1111 1111 1111 1111 1111 1111  // (用0进行补位)    结果为536870911
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: