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

Java 给定掩码大小,高效地创建具有低位集的掩码,java,optimization,bit-manipulation,Java,Optimization,Bit Manipulation,给定大小为size的掩码的大小,我想创建一个长掩码,掩码集的底部size位,上部位为零。例如,size==4的掩码是0b1111(aka0x0000000000000000F),依此类推大小必须在范围0内。您可以使用第7位的倒数并移位: long x = (size >> 6) ^ 1; return (x << size) - 1; 长x=(大小>>6)^1; 返回(x您可以使用第7位的倒数并移位: long x = (size >> 6) ^ 1; re

给定大小为
size
的掩码的大小,我想创建一个
长掩码
,掩码集的底部
size
位,上部位为零。例如,
size==4
的掩码是
0b1111
(aka
0x0000000000000000F
),依此类推<代码>大小必须在范围
0内。您可以使用第7位的倒数并移位:

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

返回(x您可以使用第7位的倒数并移位:

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

return(x)可能您可以尝试将其转换为Java?始终会有一个边界问题。在您的64和@LukeLee的零之间进行选择。或者制作一个查找表。@Toddswell-对,但这两种解决方案都可以归结为一个条件,就像我上面提到的一样(或者条件的移动式缩减,例如,
-(size!=0)&…
@EJP-当然不会总是有边界问题-上面的条件没有边界问题。如果你的意思是没有查找表就不能有效和正确地实现它-那么我想这还有待观察。我的经验是,通常有一两条额外的指令就可以实现。总会有一个纯位移位实现的边界问题,您必须使用条件分支或查找表来解决。我没有说过效率,也没有说过查找表是唯一的其他可能性:不要把话塞进我的嘴里。您需要决定是否需要避免分支。您现在已经有了c两个都有。也许你可以试着把它转换成Java?总会有一个边界问题。在你的64和@LukeLee的零之间选择。或者做一个查找表。@ToddSewell-对,但这两个解决方案都可以归结为一个条件,就像我上面提到的一样(或者条件的移动式缩减,例如,
-(size!=0)&…
@EJP-当然不会总是有边界问题-上面的条件没有边界问题。如果你的意思是没有查找表就不能有效和正确地实现它-那么我想这还有待观察。我的经验是,通常有一两条额外的指令就可以实现。总会有一个纯位移位实现的边界问题,您必须使用条件分支或查找表来解决。我没有说过效率,也没有说过查找表是唯一的其他可能性:不要把话塞进我的嘴里。您需要决定是否需要避免分支。您现在已经有了c两个都是。这真的很令人印象深刻!我还没有找到更好的,所以接受了这一个。这真的很令人印象深刻!我还没有找到更好的,所以接受了这一个。
long x = (size >> 6) ^ 1;
return (x << size) - 1;