BigInteger上的Java无符号bitshift

问题描述:

我想在右侧应用一个无符号的移位,但我找不到这样做的方式。有谁知道?BigInteger上的Java无符号bitshift

示例代码:

BigInteger bi; 

bi.shiftRight(7) // equals >> 7 

如何申请>>> 7

重复?请stahp,我没有我的答案。

+1

https://stackoverflow.com/questions/2727005/bitshifting-with-bigintegers-in-java –

+0

这样的操作符对BigInteger没有意义;你可以扩展你的问题来添加你想使用这样一个运算符,并给出几种类型的输入期望输出的例子吗? – DodgyCodeException

+0

@DodgyCodeException:我也这么认为,但为什么不呢?正数可以像正常情况一样移动,但负数应该变为正数并被否定。 IOW,右移4,0x87654321(负数)将变为0x08765432(正数)。 BigIntegers也可以模拟这一点。 –

作为BigInteger javadocs说:

无符号的向右移位运算符(>>>)被省略,因为该操作与由这个类提供的“无限字长”抽象组合没有什么意义。

+0

你可以提供一个替代方案吗? – Romeortec

我会建议也许使用一种unsigned int int,以便允许使用运算符,因为您希望使用并确保数据只有无符号。

+0

我希望这可以澄清方法创建类似于未签名的数据类型(因为Java没有)这里是一个链接。https://stackoverflow.com/questions/4449100/unsigned-int-in-java/4449161#4449161 –

如果是负值,您总是可以否定。

private void test(String[] args) { 
    test(BigInteger.ONE.shiftLeft(10)); 
    test(BigInteger.valueOf(-50)); 
} 

private void test(BigInteger bigInteger) { 
    test1(bigInteger); 
    test1(bigInteger.negate()); 
} 

private void test1(BigInteger bi) { 
    System.out.println(bi.toString(2)+" >> 5 = "+bi.shiftRight(5).toString(2)); 
} 

注:请记住,BigInteger不变所以如果你对他们的数学必须保持返回的结果因为数学没有修改这个值,则返回计算的结果。