代码之家  ›  专栏  ›  技术社区  ›  sofs1 Romain Manni-Bucau

为什么~1在Java中返回-2而不是0[[副本]

  •  -1
  • sofs1 Romain Manni-Bucau  · 技术社区  · 6 年前

    假设给定的数字(给定的数字是5)的二进制表示是101,它的取反(我的输出)应该是010。

    我用~表示从最低有效位到最高有效位的每一位,来取反。

    public static void main (String[] args) throws java.lang.Exception
        {
            // your code go
            int num = 5;
            String givenNumInBinary = Integer.toBinaryString(num);
            StringBuffer output = new StringBuffer();
    
            for(int i = 0; i <= givenNumInBinary.length()-1;i++){
                int msb = Character.getNumericValue(givenNumInBinary.charAt(i));
                output.append(~msb);
            } 
            System.out.println(output.toString());
        }
    

    我的输出结果是 -2-1-2

    为什么?我做错什么了?

    1 回复  |  直到 6 年前
        1
  •  1
  •   sofs1 Romain Manni-Bucau    6 年前

    因为你们是互相颠倒的 数字

    int msb = Character.getNumericValue(givenNumInBinary.charAt(i));
    output.append(~msb);
    

    而不是相互倒转 一点

    output.append(msb == 0 ? 1 : 0);
    ....
    System.out.println(output.toString());
    

    输出

    010