0

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

    long lng = 2543697L;

并打印出来:

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

输出是这样的:

1001101101000001010001

~但是当我使用大量前导来补充位时1's

1111111111111111111111111111111111111111110110010010111110101110

这是有道理的(填充)。现在我的问题是:

1. 为什么这些前导的'1'出现在否定中而不出现在原始中?

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

4

2 回答 2

3
  1. 1 出现在否定版本中,因为这就是负数的二进制补码表示的工作方式:-x = ~x + 1
  2. 如果您想限制打印的位数,我只需计算第一个数字中使用的位数,然后只打印第二个数字中的位数。Long.numberOfLeadingZeros在这里可能会有所帮助:

    Long.toBinaryString(~lng).substring(Long.numberOfLeadingZeros(lng))
    
于 2013-08-29T05:36:34.637 回答
0

前导 1 很重要,如果您删除它们,您将更改数字:

1111111111111111111111111111111111111111110110010010111110101110 != 10110010010111110101110
于 2013-08-29T05:58:35.590 回答