Tag: bit shift

(int)Math.pow(2,x)和1 << x的Java结果不同

为什么以下两个操作在Java中为x = 31或32产生不同的结果,但x=3结果相同? int x=3; int b = (int) Math.pow(2,x); int c = 1<<x; 结果: x=32: b=2147483647; c=1; x=31: b=2147483647; c=-2147483648; x=3: b=8 ; c=8

Java – 用整数和字节进行位移

考虑以下代码(其中byteIndex是一个int): int bitNumber = b-(8*byteIndex); bitMask = 0x8>>(byte)bitNumber; 这会产生错误 error: possible loss of precision 编译时(必需字节,找到int)。 代码 int bitNumber = b-(8*byteIndex); bitMask = 0x8>>2; 编译好。 这里有什么问题,如何修复第一个允许按int值移位的示例? 编辑:在评论之后,这是一个更完整的例子: 48) int byteIndex; 49) byte bitMask; 50) int bitNumber; // assign value to byteIndex 67) bitNumber = b-(8*byteIndex); 68) bitMask = 0x8>>bitNumber; 并且给出的错误是: …MyClass.java:68: error: possible loss of precision […]

转移Java BitSet

我使用java.util.BitSet来存储密集的位向量。 我想实现一个将位向右移1的操作,类似于>>> on int。 是否有一个库函数可以移动BitSet ? 如果没有,是否有比下面更好的方法? public static void logicalRightShift(BitSet bs) { for (int i = 0; (i = bs.nextSetBit(i)) >= 0;) { // i is the first bit in a run of set bits. // Set any bit to the left of the run. if (i != 0) { bs.set(i – 1); } […]

按位移位运算符。 签名和未签名

我正在使用互联网上的补习说进行SCJP考试。 根据我的说明, >>操作符应该是右移的符号,符号位从左边开始。 而左移位运算符<<应该保留符号位。 但是,我可以使用<<运算符来移动符号(fe Integer.MAX_VALUE << 1计算结果为-2 ,而我永远无法使用>>运算符移动符号。 我必须在这里误解一些东西,但是什么?