java按位运算符(操作符)

      按位运算符是来操作整数基本数据类型中的单个“比特”(bir),即二进制位,位运算符会对两个参数中对应的位执行布尔代数运算,并最终生成一个结果。

1、“与”、“位与”(&)

        按位“与”操作符,如果两个数的二进制,相同位数都是1,则该位结果是1,否则是0.

  例1 5&4

        5的二进制是  0000 0000 0000 0101

        4的二进制是  0000 0000 0000 0100

        则结果是        0000 0000 0000 0100  转为十进制是4。

2、“或”、“位或”(|)

        按位“或”操作符,如果两个数的二进制,相同位数有一个是1,则该位结果是1,否则是0

  例2  5 | 4

        5的二进制是  0000 0000 0000 0101

      4的二进制是  0000 0000 0000 0100

        则结果是        0000 0000 0000 0101  转为十进制是5。

3、“异或、“位异或”(^)

        按位“异或”操作符,如果两个数的二进制,相同位数只有一个是1,则该位结果是1,否则是0

  例3  5 ^ 4

        5的二进制是  0000 0000 0000 0101

        4的二进制是  0000 0000 0000 0100

        则结果是        0000 0000 0000 0001 转为十进制是1 

4、“非”、“位非”(~)也称为取反操作符

        按位“非”操作符,属于一元操作符,只对一个操作数进行操作,(其他按位操作符是二元操作符)。按位“非”生成与输入位相反的值,——若输入0,则输出1,若输入1,则输出0。

  例4  以正数5为例~5

        5的二进制是  0000 0000 0000 0101

        则~5是           1111 1111 1111 1010  转为十进制是 -6。

        二进制的正负是从高位看,最高位如果1则是负数,如果是0则是正数。

        如果负数单纯是把最高位变为1的话,在运算中会出现不是我们想要的值,所以引入了:原码,反码,补码。
   1.在java 中,所有的数据都是以补码的形式表示
   2.正数:原码,补码,反码相同
   3.负数:(最高位符号位为1,表示负数)
      负数的原码:正数的原码,最高位符号位变为1
      负数的反码:最高位不变,其他为取反
      负数的补码:反码的末尾+1

        负数的二进制转化,计算机计算是用的补码

        1、首先取出这个数的原码的二进制,

        2、然后再求出反码

       3、最后求出补码

  例5  以负数-5为例:

        -5的原码是 (先将-5的绝对值转换成二进制)              1000 0000 0000 0101    

        求出反码的是            1111 1111 1111 1010

        求出补码是(反码加1)                1111 1111 1111 1011

所以Java中Integer.toBinaryString(-5)结果为11111111111111111111111111111011. Integer是32位(bit)的.

Java移位操作符

        移位操作符操作的运算对象也是二进制的“位”。移位操作符只可用来处理整数类型,左移位操作符(<<)能按照操作符右侧指定的位数将操作符左边的操作数向左移动(在低位补0),“有符号”右移位操作符(>>)则按照操作符右侧指定的位数将操作符左边的操作数向右移。“有符号”右移位操作符使用“符号扩展”;若符号位正,则在高位插入0;若符号位负。则在高位插入1。java中增加了一种“无符号”右移位操作符(>>>),他使用“零扩展”;无论正负,都在高位插入0。这一操作符是C或C++中所没有的。

  例6  5<<2 等于20

        5的二进制是   0000 0000 0000 0101

        左移两位         0000 0000 0001 0100

  例7  5>>2 等于 1

        5的二进制是   0000 0000 0000 0101

        右移两位         0000 0000 0000 0001

  例8  -5>>2 等于 -2

        -5的二进制是   1111 1111 1111 1011

        右移两位          1111 1111 1111 1110 转十进制,例5反着来,先-1,然后取反,步骤如下:

        1.先减1     1111 1111 1111 1101

        2.取反       0000 0000 0000 0010

        3.转为十进制   2^1=2

      Java中Integer.toBinaryString(2)结果为10. Integer是32位(bit)的.

      Java中Integer.toBinaryString(-2)结果为11111111111111111111111111111110. Integer是32位(bit)的.

    例9  14>>>2 等于 3      

     0000 0000 0000  1110    无符号右移2位 :  0000 0000 0000 0011    转为 十进制为3

    -14>>>2 等于 1073741820

     11111 1111 1111   0010    无符号右移动2为: 0011 1111 1111 1100

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值