将 bitset space 减半进行按位运算时的意外行为
Unexpected behaviour when doing bitwise operations halving bitset space
所以我在 java.
中创建了最长的 "bitsets"
我一直认为,如果我使用 long 就可以玩 64 位。
然而我现在发现并没有那么简单...
而且我怀疑它与溢出和转换有关...
long x = 1<< 30;
return x+ "="+ Long.toBinaryString(x);
渲染:
1073741824=1000000000000000000000000000000
预期。
但是:
long x = 1<< 31;
return x+ "="+ Long.toBinaryString(x);
渲染:
-2147483648=1111111111111111111111111111111110000000000000000000000000000000
??????
我假设它必须与如何计算二进制移位的长等效值然后呈现为长。即它被转换为 long 然后计算,我认为这是一个溢出...
我预计
10000000000000000000000000000000
长值是一些负数(不知道它是什么)。
java中的long中肯定有64位...如
Long.toBinaryString(Long.MAX_VALUE);
呈现:1111111111111111111111111111111111111111111111111111111111111(64 个 1)。
如何在我的位集中使用剩余的长space?
这是因为 1<< 31
是 int
,等于 Integer.MIN_VALUE
,然后您将其扩展为 long
。
使第一个操作数成为long
:
1L << 31
所以这个:
long x = 1L << 31;
return x+ "="+ Long.toBinaryString(x);
2147483648=10000000000000000000000000000000
所以我在 java.
中创建了最长的 "bitsets"我一直认为,如果我使用 long 就可以玩 64 位。
然而我现在发现并没有那么简单...
而且我怀疑它与溢出和转换有关...
long x = 1<< 30;
return x+ "="+ Long.toBinaryString(x);
渲染:
1073741824=1000000000000000000000000000000
预期。
但是:
long x = 1<< 31;
return x+ "="+ Long.toBinaryString(x);
渲染:
-2147483648=1111111111111111111111111111111110000000000000000000000000000000
??????
我假设它必须与如何计算二进制移位的长等效值然后呈现为长。即它被转换为 long 然后计算,我认为这是一个溢出...
我预计
10000000000000000000000000000000
长值是一些负数(不知道它是什么)。
java中的long中肯定有64位...如
Long.toBinaryString(Long.MAX_VALUE);
呈现:1111111111111111111111111111111111111111111111111111111111111(64 个 1)。
如何在我的位集中使用剩余的长space?
这是因为 1<< 31
是 int
,等于 Integer.MIN_VALUE
,然后您将其扩展为 long
。
使第一个操作数成为long
:
1L << 31
所以这个:
long x = 1L << 31;
return x+ "="+ Long.toBinaryString(x);
2147483648=10000000000000000000000000000000