位运算求 二进制 最后为一的 bit位

Leetcode上有人贴的代码

int diff = ...
diff &= -diff;

得到的是 二进制 最后为一的 bit位, 比如diff = 0x1110, 上述运算后 diff为 0x0010, 求解释.

阅读 5.5k
1 个回答

负数的二进制是原码的补码,负数的补码为对该数的原码除符号位外各位取反,然后在最后一位加1
所以-diff二进制就是
0x111....10010
& 0x000000001110 后得0x10

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进