2

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

//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


} */
}
4

1 回答 1

4

2 的补码只是1在 1 的补码上加一个。现在,您添加的是二进制位 1 而不是int1。

您将 2 的补码存储在int. 只需添加另一个int包含二进制 1 的内容。获取二进制补码有点复杂。这涉及按位加法。但是,我在高中时学到了一个技巧。

将二进制中的数字 6 视为0110。一个的补码是1001。二进制补码是1010。诀窍是,找到最右边的那个。完成后,将位翻转到它的左侧,一直到最后。

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

要将位 1 存储在 中int,您可以这样做int bit = 0b0001这将在 int 的低位存储位 1。

PS:我还没有做SSCCE。如果我错了请纠正我

于 2014-01-19T05:08:29.603 回答