开发者社区 问答 正文

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

Leetcode上有人贴的代码

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

展开
收起
a123456678 2016-06-08 20:01:09 2233 分享 版权
1 条回答
写回答
取消 提交回答
  • 负数的二进制是原码的补码,负数的补码为对该数的原码除符号位外各位取反,然后在最后一位加1
    所以-diff二进制就是
    0x111....10010
    & 0x000000001110 后得0x10

    2019-07-17 19:32:38
    赞同 展开评论
问答地址: