代码之家  ›  专栏  ›  技术社区  ›  dogbane

手工计算~100

  •  1
  • dogbane  · 技术社区  · 14 年前

    如果我打印出来 ~100 -101 . 我想用手解决这个问题。

    不是( ~ )运算符反转所有位。

    100 二进制是 00000000000000000000000001100100 .

    反转其位可得到:

    11111111111111111111111110011011

    现在怎么办?我怎么得到 -101个 ?

    2 回复  |  直到 14 年前
        1
  •  10
  •   Matthew Flaschen    14 年前

    Java使用二的补码(请参见 §4.2 原语类型和值)若要求反,则取补语并添加一个。

    -x = ~x + 1
    ~x = -x - 1
    ~100 = -100 - 1
    

    另一种思考方法是注意:

    11111111111111111111111111111111 = -1
    

    然后:

      11111111111111111111111111111111 (-1)
    - 11111111111111111111111110011011 (~x)
    =                          1100100 (100)
    
    -1 - ~x = 100
    -1 - 100 = ~x
    ~x = -101
    
        2
  •  0
  •   Neowizard    14 年前

    如果要在该系统中获取一个数字并将其转换回旧式二进制: