在学习计算机组成原理汇总遇到了一个关于无符号数减法的问题
首先条件是在8位字长的计算机中运行:
unsigned int x = 134;
unsigned int y = 246;
unsigned int z1 = x - y;
很明显
x的机器数是 1000 0110B
y的机器数是 1111 0110B
那么z1的机器数是多少呢
首先需要理解的一点在于
无符号数的意义在于机器数将以无符号数的方式来解释,在运算过程中我们不需要考虑它是什么样的类型,不管它是int好,还是unsigned也好,我们都按照补码的方式来进行运算
所以
z1 = [x]补 + [-y]补 = 1000 0110B + 0000 1010B = 1001 0000B
其中[y]补与[-y]补的关系为符号位取反,数值位取反加1
进一步举例
int main()
{
unsigned short int i = 32767;
unsigned short int j = -i;
printf("%d",j);
}
i的机器数是[0111 1111 1111 1111]补
那么j = [-i]补 = 1000 0000 0000 0001
所以j就等于32767