我目前正在为大学的一个项目构建一个4位的逐位加法器 - 减法器,但减法对我来说并不都是有意义的。我让它为正值1100 - 0100 = 1000
工作但是当结果为负时我不确定我的答案是否正确。从标题中可以看出,当我0011 - 1111
进行无符号减法时,我的结果为0100
。有人可以向我核实这是正确的答案,并且在执行此计算时溢出或进位都不应该是1
吗?
答案 0 :(得分:0)
嗯,简短的回答是否定的。由于您使用的是无符号二进制0100
,因此等同于4
。可能有用的是你取得了返回结果的模数。要做到这一点你可以这样
public class Modul {
public static void main(String[] args) {
int x = 0b0011;
int y = 0b1111;
int z = x - y;
int s1 = Integer.MAX_VALUE+1;
int s2 = s1*2;
int finalInt = s2-z;
System.out.println(x + "+" + y + "=" + z);
System.out.println(Integer.toBinaryString(x) + "-" + Integer.toBinaryString(y) + "=" + Integer.toBinaryString(finalInt));
}
}
这将返回1100
,相当于12
我不知道为什么你使用无符号二进制来标记二进制补码,但是如果你想要它有两个赞美,你可以使用这个小程序返回32位有符号二进制数
public class Test {
public static void main(String[] args) {
int x = 0b0011;
int y = 0b1111;
int z = x - y;
System.out.println(x + "+" + y + "=" + z);
//3-15=-12
System.out.println(Integer.toBinaryString(x) + "-" + Integer.toBinaryString(y) + "=" + Integer.toBinaryString(z));
//0011-1111=11111111111111111111111111110100
}
}
我相信此字符串的最后四位是您从
获取0100
的位置