打印没有填充的BinaryString

时间:2013-08-29 05:31:25

标签: java bit-manipulation complement

假设我已经定义了一个long变量:

    long lng = 2543697L;

并打印出来:

    System.out.println (" first long "+Long.toBinaryString(lng));

输出是这样的:

1001101101000001010001

但是当我使用~补充这些位时,会出现大量前导1's

1111111111111111111111111111111111111111110110010010111110101110

这是有意义的(填充)。现在我的问题是:

1。为什么这些领先的'1'出现在否定中而不是原始出现?

2。如果我不想打印它们而只是打印补充的原始位,我该怎么办?

2 个答案:

答案 0 :(得分:3)

  1. 1出现在否定版本中,因为这是负数的Two's Complement二进制表示的工作原理:-x = ~x + 1
  2. 如果要限制打印的位数,我只计算第一个数字中使用的位数,并仅打印第二个数字中的多个位。 Long.numberOfLeadingZeros在这里可能会有所帮助:

    Long.toBinaryString(~lng).substring(Long.numberOfLeadingZeros(lng))
    

答案 1 :(得分:0)

领先的1是重要的,如果你删除它们,你将改变数字:

1111111111111111111111111111111111111111110110010010111110101110 != 10110010010111110101110