无符号二进制减法(0011 - 1111 = 0100?)

时间:2016-01-03 20:57:13

标签: binary subtraction twos-complement

我目前正在为大学的一个项目构建一个4位的逐位加法器 - 减法器,但减法对我来说并不都是有意义的。我让它为正值1100 - 0100 = 1000工作但是当结果为负时我不确定我的答案是否正确。从标题中可以看出,当我0011 - 1111进行无符号减法时,我的结果为0100。有人可以向我核实这是正确的答案,并且在执行此计算时溢出或进位都不应该是1吗?

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的位置