gpt4 book ai didi

java - 给定掩码大小,有效地创建具有低位集的掩码

转载 作者:行者123 更新时间:2023-12-01 21:13:11 25 4
gpt4 key购买 nike

给定尺寸为size的掩模的尺寸我想创建一个long mask有底size掩码集的位,高位为零。例如,size == 4 的掩码是 0b1111 (又名 0x0000000000000000F ),等等。 size必须在 0 <= size <= 64 范围内.

对于所有输入都不正确的典型尝试如下:

long makeMask(int size) {
return (1L << size) - 1;
}

...但是对于 size == 64 会失败,返回 0 而不是预期的全 1: 0xFFFFFF.... 。对于 int面具,我可以转换到 long以避免此问题,但对于 long我没有看到类似的解决方法。

我可以做这样的事情:

long makeMask(int size) {
return size == 64 ? -1L : (1L << size) - 1;
}

...但我真的很想避免其中出现不可预测的分支。

最佳答案

您可以使用第 7 位的倒数并进行移位:

long x = (size >> 6) ^ 1;
return (x << size) - 1;

何时 size = 64这一套x = 0(0 << whatever) - 1显然是-1。

在其他情况下,它会简化为旧的 (1L << size) - 1 .

关于java - 给定掩码大小,有效地创建具有低位集的掩码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40775256/

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