假设我已经定义了一个long
变量:
long lng = 2543697L;
并打印出来:
System.out.println (" first long "+Long.toBinaryString(lng));
输出是这样的:
1001101101000001010001
但是当我使用~
补充这些位时,会出现大量前导1's
:
1111111111111111111111111111111111111111110110010010111110101110
这是有意义的(填充)。现在我的问题是:
1。为什么这些领先的'1'出现在否定中而不是原始出现?
2。如果我不想打印它们而只是打印补充的原始位,我该怎么办?
答案 0 :(得分:3)
-x = ~x + 1
如果要限制打印的位数,我只计算第一个数字中使用的位数,并仅打印第二个数字中的多个位。 Long.numberOfLeadingZeros
在这里可能会有所帮助:
Long.toBinaryString(~lng).substring(Long.numberOfLeadingZeros(lng))
答案 1 :(得分:0)
领先的1是重要的,如果你删除它们,你将改变数字:
1111111111111111111111111111111111111111110110010010111110101110 != 10110010010111110101110