有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

位操作为什么在Java中~1返回2而不是0?

我试图对给定int的所有位求反

假设给定的数字(给定的数字是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) 个答案

  1. # 1 楼答案

    因为你在倒数每一个数字

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

    而不是反转每个

    另一种解决方案是

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

    输出

    010