java之位运算符

    位运算符

前面我们提过,所有的整数类型,除了char外,都是有符号的。JAVA使用补码表示二进制数,在补码表示中,最高位为符号位,正数的符号位为0,负数的符号位为1

 

 

序号

运算符

含义

1

<< 

左移(移位运算符)

2

>> 

右移(移位运算符)

3

>>> 

无符号右移(移位运算符)

4

~

(取反)(位逻辑运算符)

5

^

异或(位逻辑运算符)

6

&

(位逻辑运算符)

7

|

(位逻辑运算符)

 

注:位运算符只存在于整数之间,前面说过byteshortchar 在运算时都会转为int类型,所以这3种类型也可以参与位运算。浮点数不能进行位运算

 

 

 

 

 


上表中7种位运算符中,前3种是移位运算符,后4种是位逻辑运算符。

 

    3个移位运算符

移位运算符有3个:<<>>>>>

    <<左移运算符

例:-2 << 2

解:-2以二进制数表示为:11111111 11111111 11111111 11111110  整形为32位。

       左移运算符表示,将这个二进制数往左边移2位,即在末尾补20

       结果得到二进制数:11111111 11111111 11111111 11111000

       除去符号位转成10进制数,得8,其符号位为1,即为负数,结果为-8

 

 

    >>右移运算符

例:5 >> 2

解:5以二进制表示为:00000000 00000000 00000000 00000101

       右移运算符表示,讲这个二进制数往右移动2位,即在前面补20,后面多余的部分移除。

       结果得到二进制数:00000000 00000000 00000000 00000001

       出去符号位转成10进制数,得1,其符号位为0,即为正数,结果为1

 

    >>>无符号右移

无符号右移动,即忽略符号位,将二进制数转成十进制数时也将符号位的10计算在内

1-2 >>> 5

解: -2以二进制数表示为:11111111 11111111 11111111 11111110

        将这个二进制数往右移5位,即得:00000111 11111111 11111111 11111111

        忽略符号位,再转为十进制数得到结果:134217727

 

25 >>> 2

解: 5以二进制数表示为:00000000 00000000 00000000 00000101

        将这个二进制数往右移3位,即得:00000000 00000000 00000000 00000001

        忽略符号位,再转为十进制得到结果:1

 

    4个位逻辑运算符号

位逻辑运算符有4个:^ ~ & |

    ^异或运算符

异或运算先查看两个数的二进制表示值,并执行按位异或。按位异或的计算方法为,当且仅当只有一个数的二进制数的某位为1时,结果的该位才为1,否则结果的该位为0

1 5 ^ 3

解:5的二进制表示: 00000000 00000000 00000000 00000     101  (前面为符号位)

       3的二进制表示: 00000000 00000000 00000000 000000     11

           结果为   00000000 00000000 00000000 00000     110

       结果转成10进制数为:6

 

2 -5 ^ 2

解:-5的二进制表示:11111111 11111111 11111111 11111     101

       2的二进制表示:00000000 00000000 00000000 00000    010

              结果为:       11111111 11111111 11111111 11111     111

       结果转成十进制数为:-7

 

    ~取反运算符

取反运算符,顾名思义,取反运算符就是把某个二进制表示数中的1变成00变成1

例: ~4

解: 4的二进制数表示为: 00000000 00000000 00000000 00000  100 (前面为符号位)

              取反为:              11111111 11111111 11111111 11111    011

              转成十进制数为:-5

 

    &逻辑与运算符

逻辑与运算最直观的运算规律为: 0 0

即两个二进制数进行逻辑与运算时,在相同位数上只要有0,则结果的相同位上得0

13 & 5

解:3 的二进制表示为:00000000 00000000 00000000 00000011

       5 的二进制表示为:00000000 00000000 00000000 00000101

       逻辑与运算结果为:00000000 00000000 00000000 00000001

       转成十进制数结果为: 1

 

2 -3 & 5

解:-3的二进制表示为:11111111 11111111 11111111 111111    11

        5的二进制表示为:00000000 00000000 00000000 00000  101

        逻辑与运算结果为:00000000 00000000 00000000 00000 101

        转成十进制数结果为: 5

 

    | 逻辑或运算符

逻辑或运算最直观的运算规律为:11

即两个二进制数进行逻辑或运算时,在相同位数上只要有1,则结果的相同位上得1

1 4 | 3

解: 4的二进制表示为: 00000000 00000000 00000000 00000100

        3的二进制表示为: 00000000 00000000 00000000 00000011

       逻辑或运算结果为: 00000000 00000000 00000000 00000111

       转成十进制数结果为: 7

 

2 -2 | 4

解: -5 的二进制表示为: 11111111 11111111 11111111 11111110

        4的二进制表示为: 00000000 00000000 00000000 00000100

       逻辑或运算结果为: 11111111 11111111 11111111 11111110

       转成十进制数结果为: -2

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章