请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

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

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

正在回答 回答被采纳积分+3

1回答

咚咚呛 2020-03-08 00:15:38

这里面计算有误。

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

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

3-7 = 3+(-7)。

3的补码等于:0,0011

-7的补码等于:1,1001

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

1 回复 有任何疑惑可以回复我~
  • 提问者 小铖06 #1
    用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 09:40:19
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信