java中的位运算

本文详细介绍了位运算的基本概念,包括常见的位运算符如取反、或、与、左移、右移等,并通过实例展示了负数位移运算的过程及规律。此外还探讨了位运算在Java程序中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

适当的使用位运算可以提升java程序的效率。


什么是位运算?有哪些位运算符?

~ 取反  ,| 或  ,& 与 ,<< 有符号左移,>>有符号右移,>>>无符号右移,^ 异或


数据在计算机底层是用补码进行操作的。

整数的原码,补码和反码都是它本身。

负数的原码符号位是1;反码是除符号位,其他位取反;补码是反码+1.


例如:15 的 原码用八位来表示: 00001111  ,反码 00001111,补码 00001111

负数的位移运算:

  右移:左边的空出的位置1;左移:

   右移:

     -15的 原码 :10001111 , 反码 11110000 ,补码 11110001.


- 15 右移两位:11111100 求原码为: 10000100

      也可以用四位表示就是:11111,补码是10001,右移两位是11100,原码表示是10100,就是-4.


-20右移两位
10010100  补码 11101100 右移两位是 11111011求原码表示是 10000101. 就是-5.
左移:
-15左移2位:

补码:11110001->11000100  表示为原码是 10111100 结果是 60

-15左移4位:原码 1000 0000 0000 1111

补码:1111 1111 1111 0001->1111 1111 0001 0000 表示位原码是 1000 0000 1111 0000 结果是128+64+32+16 = 240

总结一下规律:

  右移:相当于 /2 ,因此绝对值会也来越小。

      负数:右移之后,高位都补1,而不是只有最高位补1;

      正数:右移之后,高位置0.

  左移:相当于 X2,因此数值会越来越大,应当注意溢出问题,像上面的-15左移4位,如果用8位来表示,则不能够表示正确的结果,因此应该注意左移的问题。

     正数 ,负数都是如此。

 

>>>(无符号右移)
运算规则:
把所有的二进制数字向右移动对应位数,低位移出(舍弃),高位的空位补零。对于正数来说和带符号右移相同,对于负数来说不同,相当于把符号位一起移动。 其他结构和>>相似。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值