1对2的补码转换的补充

时间:2014-01-19 04:37:09

标签: java twos-complement ones-complement

我的代码是一个将十进制转换为二进制的类。它将显示二进制,一个补码和二进制补码。到目前为止,我已经找到了一个补码,但在找到两个补码的解决方案时遇到了问题。我的计划是使用补码的输出作为二进制补码方法的输入并转换。这是正确的做法吗?

//This method will convert binary result to ones complement
public String do1sComp(){
    if (binaryValue.length() == 0)
        doBinary();

    //Ones Complement
    char[] digits = binaryValue.toCharArray();
    for (char digit : digits){
        if(digit == '0'){
            onesComp += "1";
        }
        else 
            onesComp += "0";
        }

    return onesComp;
}

/* This was my attempt to start the method
public String do2sComp(){
    if (onesComp.length() == 0){
        if (binaryValue.length() == 0)
            doBinary();

        do1sComp();
    }

    //Twos Complement


} */
}

1 个答案:

答案 0 :(得分:4)

2的补码只是在1的补码中加1。现在,您要添加二进制位1而不是int 1。

您将在int中存储2的补码。只需添加包含二进制1的另一个int。获得两个补码更多一些。这涉及按位添加。然而,我在高中时学到了一些技巧。

将二进制数字6视为0110。一个补码是1001。这两个补码是1010。诀窍在于,找到最合适的一个。完成后,将位翻转到左侧,一直到最后。

使用Integer.toBinaryString()查看您的答案。

要在int中存储位1,您需要执行int bit = 0b0001这将在int的低位中存储位1。

PS:我还没有参加过SSCCE。如果我错了,请纠正我