-1

我试图否定(又名反转)给定 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

这是为什么?我究竟做错了什么?

4

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
于 2018-10-15T02:22:59.567 回答