Java中的位操作--一般编码也不用,源码比较常见

今天看jdk中类的源码,有很多地方是通过对位的操作来改变数值。之前也看过,现在仅对ava中位操作记录一下,以免日后混淆不清。

大伙都知道,计算机世界里只有 0 和 1,因为数字集成电路由晶体管构成,晶体管的开关特性让输出端和输入端只能是高低电平。一个电信号端口就是一位(bit),8个并一排就是8位,也叫一字节(byte)。计算机中计算它的二进制数,我们习惯十进制。所以就有一个转换过程。

值有正、负和0之分,以java 中 int 类型为例,四字节32位。表示0时,32个0

计算机中表示正数时,最高位为0,表示负数时,最高位为1,这样转换过来的二进制码叫【原码】。

原码如果保留符号位(最高为)不变,其它位依次取反,这样表示出来的二进制码叫【反码】。

在反码的基础上,最低位 加 1,这样表示出来的二进制码叫【补码】,这才是计算机运算和存储的二进制数表示方法。

综上所述:正数的原码,反码,补码都一样。负数的就有点搞人了。。。。。。计算机中计算补码,是有原因的。可自行搜索看看。

7 的补码  00000000000000000000000000000111

-7 的补码 11111111111111111111111111111001

 9 的补码 00000000000000000000000000001001

 

1、与(&)  --有0为0

  0111 | 1001 = 0001

2、或(|)   --有1为1

  0111 & 1001 = 1111

3、非(~)  --1和0 互换

  ~ 0111 = 1000

4、异或(^)  --相同为0,不同为1

  0111 ^ 1001 = 1110

5、左移(<<) 

7 << 1 = 00000000000000000000000000001110

7 << 2 = 00000000000000000000000000011100

-7 <<1 = 11111111111111111111111111110010

-7 <<2 = 11111111111111111111111111100100

左移末位补0,移动32位会回到原数值。

一般常说左移n位是乘2的n次方倍,但是在一定情况下,正数可以移成负数哦。

6、右移(>>)  

正数右移,末位移除,高位补0

7 >> 1 = 00000000000000000000000000000011

7 >> 2 = 00000000000000000000000000000001

7 >> 3 = 00000000000000000000000000000000

负数右移,末位移除,高位补1

-7 >> 1 = 11111111111111111111111111111100
-7 >> 2 = 11111111111111111111111111111110
-7 >> 3 = 11111111111111111111111111111111

同样移动32位会回到原数值。

7、带符号右移(>>>)

7 >>> 1 = 00000000000000000000000000000011

7 >>> 2 = 00000000000000000000000000000001

7 >>> 3 = 00000000000000000000000000000000

-7 >>> 1 = 0111111111111111111111111111100

-7 >>> 2 = 00111111111111111111111111111110

-7 >>> 3 = 00011111111111111111111111111111

以上二进制表示的都是【补码】方式。先 -1 成反码,然后保留符号位,其它位依次取反就是原码,再转化为十进制即可。

比如:11111111111111111111111111111001 补码

          减 1 为 11111111111111111111111111111000 反码

      保留符号位,其它依次取反 为 10000000000000000000000000000111 原码 即为十进制  -7

 

位数较多,可能有误,若有发现,烦请指出。敲的不易。。。。。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值