我的代码是一个将十进制转换为二进制的类。它将显示二进制,一个补码和二进制补码。到目前为止,我已经找到了一个补码,但在找到两个补码的解决方案时遇到了问题。我的计划是使用补码的输出作为二进制补码方法的输入并转换。这是正确的做法吗?
//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
} */
}
答案 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。如果我错了,请纠正我