gpt4 book ai didi

java - 通过 0 位操作清除 i 中的位

转载 作者:行者123 更新时间:2023-11-30 02:14:42 25 4
gpt4 key购买 nike

我打算阅读《破解编码面试》第 5 章位操作并找到了清除编号 num 中从 i 到 0 的位的方法

int mask = ~(-1 >>> (31 - i));
return num & mask

虽然上面的方法有效

我们可以简单一点吗

int mask = (-1 << (i+1));
return num & mask;

我是否遗漏了任何极端情况?

最佳答案

绝对是的。你的面具-1 << (i+1)逻辑上相当于书本的掩码 ~(-1 >>> (31 - i)) .

你的方法按位移位-1向左i + 1次,补最低i + 10 .

这本书的方法在逻辑上发生了转变-1向右31 - i次,充值最高31 - i0 。但是,它随后会反转这些位,这使得您的位与它等效。验证 int 的所有值,您可以创建一个简单的 for 循环:

for (int i = 0; i < 31; i++) {
System.out.println(~(-1 >>> (31 - i)) + " " + (-1 << (i+1)));
}

运行时,您会发现这两个掩码在每次迭代中都是等效的。

关于java - 通过 0 位操作清除 i 中的位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48980822/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com