采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
3的源码是0011,补码是0011 -7的源码是0111, 补码是1001 所以3-7 = 0011+1001 = 1100 转化为十进制等于 12。 4位最多可以表示16个数,用16-4=12,和-4有这个关系。
这里面计算有误。
首先,如果是无符号数的运算,就不能支持3+(-7)的运算,因为-7是负数。
如果需要用4位去运算,则需要添加一位符号位运算,然后再按照课程的步骤计算结果。以下给出正确的过程:
3-7 = 3+(-7)。
3的补码等于:0,0011
-7的补码等于:1,1001
运算得到结果补码为:1,0011,得到原码为:1,0100 = -4。
用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
登录后可查看更多问答,登录/注册
编程之前先学这门课,系统补足计算机基础知识,夯实编程地基
3.4k 17
1.8k 14
1.3k 13
1.4k 11