gpt4 book ai didi

Java BigInteger 和 Shift 运算符

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

我有枚举;

enum testMe {
one,
two,
three;

long longValue() {
return 1<<ordinal();
}
}

for (testMe myLoop = testMe.values()) {
System.out.println(value.longValue() + ":" + myLoop);
}

循环遍历枚举给出了我所期望的枚举值序数的变化。但是,我需要对传入 long 的参数进行限定;

Long myLong = 3;
for (testMe myLoop = testMe.values()) {
if ((myLong & value.longValue()) != 0) {
System.out.println(value.longValue() + ":" + myLoop);
}
}

在这种情况下,只会打印“一”和“二”。但是,此方法仅适用于枚举中的 32 个值。有谁知道我如何使用 BigInteger???

    BigInteger longValue() {
BigInteger one = BigInteger.valueOf(1);
return one.shiftLeft(ordinal());

谢谢C

最佳答案

  BigInteger b =BigInteger.ZERO;
b = b.setBit( ordinal() );

您还可以使用 BigInteger.and(BigInteger x)。

enum OneTwo {
one,
two,
three;

BigInteger biValue() {
BigInteger bi = BigInteger.ZERO;
return bi.setBit(ordinal());
}
BigInteger biValue( BigInteger filter ) {
BigInteger bi = BigInteger.ZERO;
return bi.setBit(ordinal()).and(filter);
}
}

还有一个测试:

BigInteger three = BigInteger.valueOf(3L);
for (OneTwo ot: OneTwo.values()) {
System.out.println( ot.biValue() + ":" + ot);
System.out.println( ot.biValue(three) + ":" + ot);
}

打印没有问题。

或者与零比较

if( BigInteger.ZERO.equals( bi.setBit(ordinal()).and(filter) ) ){
// no bits in filter are set
}

关于Java BigInteger 和 Shift 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27426173/

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