为什么 ~1 在 Java 中返回 -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


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


MYYA
浏览 216回答 1
1回答

慕村9548890

因为你每次反演位在int msb = Character.getNumericValue(givenNumInBinary.charAt(i));output.append(~msb);而不是反转每一位。替代解决方案是output.append(msb == 0 ? 1 : 0);....System.out.println(output.toString());输出010
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java