请问4位无符号数:3-7的结果是12?

来源:4-5 二进制的反码表示法

小铖06

2020-03-07

3的源码是0011,补码是0011
-7的源码是0111, 补码是1001
所以3-7 = 0011+1001 = 1100 转化为十进制等于 12。
4位最多可以表示16个数,用16-4=12,和-4有这个关系。

写回答

1回答

咚咚呛

2020-03-08

这里面计算有误。

首先,如果是无符号数的运算,就不能支持3+(-7)的运算,因为-7是负数。

如果需要用4位去运算,则需要添加一位符号位运算,然后再按照课程的步骤计算结果。以下给出正确的过程:

3-7 = 3+(-7)。

3的补码等于:0,0011

-7的补码等于:1,1001

运算得到结果补码为:1,0011,得到原码为:1,0100 = -4。

1
1
小铖06
用4位去运算,则不需要添加一位符号位运算。内存就分配了4位数字位,所以,不会加符号位。 3的源码是0011,补码是0011 -7的源码是0111, 补码是1001 所以3 + -7 = 0011+1001 = 1100 这个1100是无符号的整数,所以补码和原码相等,结果就是1100 转化为十进制等于 12。 C语言代码: unsigned int num1,num2; num1 = 3; num2 = 7; printf("%u\n",num1-num2); //结果:4294967292 printf(“%u\n”,num2-num1); //结果:4 c语言int型由4个字节组成,也就是32位, 2^32 = 4294967296,无符号int可以表示这么多个的数。没空间再加个符号位了。 3 + (-7) 进行补码运算是 00000000000000000000000000000011 + 11111111111111111111111111111001 = 11111111111111111111111111111100 = 4294967292。这是减法造成了无符号数的溢出。 补码的原理就是模运算,加上一个数相当于减了对应的某个数。参考:https://baike.baidu.com/item/%E8%A1%A5%E7%A0%81/6854613
2020-03-08
共1条回复

(新版)计算机基础,计算机组成原理+操作系统+网络

编程之前先学这门课,系统补足计算机基础知识,夯实编程地基

7739 学习 · 1580 问题

查看课程