You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

这段Java位运算代码的执行原理是什么?请解析a & -a部分

代码执行逻辑详解

先回顾已知步骤:

  • s=4(二进制0100),k=3(二进制0011),异或运算s^k得到0111(十进制7),所以变量a=7。

接下来重点解释b = a & -a的运算过程:

1. Java中整数的存储规则

Java里所有整数都是以补码形式存储的,负数的补码计算规则是:

  • 先取该正数的二进制原码
  • 对原码按位取反(得到反码)
  • 最后加1,得到负数的补码

2. 计算-a的补码(a=7)

  • 7的32位二进制原码:00000000 00000000 00000000 00000111
  • 按位取反得到反码:11111111 11111111 11111111 11111000
  • 反码加1得到-7的补码:11111111 11111111 11111111 11111001

3. 执行按位与运算a & -a

把a(7)和-a(-7)的二进制对齐做按位与(只有对应位都为1时结果才是1,否则为0):

00000000 00000000 00000000 00000111
& 11111111 11111111 11111111 11111001
---------------------------------------
  00000000 00000000 00000000 00000001

结果就是二进制000...0001,对应十进制1,这就是程序输出1的原因。

这个运算的通用作用

a & -a是一个常用的位运算技巧,它的作用是提取整数a的二进制表示中最右边的1对应的数值。比如:

  • 若a=6(二进制110),a&-a结果是2(二进制10)
  • 若a=8(二进制1000),a&-a结果是8(二进制1000)

内容的提问来源于stack exchange,提问作者Sharath Cherry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 22:40:25