C语言中负数的补码的问题 20
C语言中求负数的补码的过程有如下几个版本,备注:版本①是我自己个人认为的,不一定对。版本①,负整数的补码在最高位“强制”写上1,最高位之后剩下为原码的绝对值部分取反后加1...
C语言中求负数的补码的过程有如下几个版本,备注:版本①是我自己个人认为的,不一定对。
版本①, 负整数的补码 在最高位“强制”写上1,最高位之后剩下为 原码的绝对值部分取反后加1
版本②,像谭浩强《C程序设计》(第三版)P41中所说的
例如求 -10 的补码的方法是:
一, 取-10的绝对值10
二,10的绝对值的二进制形式为 1010
三,对1010取反得 111111111111 0101 (一个整数占16位)
四,再加1得 -10的补码 111111111111 0110
问一,究竟是哪个对呢?为什么呢?能举个反例吗?谢谢。
问二,对于-127 若对于8位来说 它的补码 我用网络上的计算器得到的是 10000001
那若按版本②,即谭浩强《C程序设计》(第三版)P41中所说的 方法
那得到的是 结果是 0000001 啊
1111111 (127的绝对值)
0000000 (取反)
0000001 (加1)
即使按书中 (一个整数占16位)来看那 -65535 的补码 岂不是 0000000000000001 了吗?
毕竟 65535 对应的二进制是 1111111111111111
问三,对于 —0 的补码 是多少呢?
问四,如何通过程序或软件来查看一个数字字计算机中的补码? 展开
版本①, 负整数的补码 在最高位“强制”写上1,最高位之后剩下为 原码的绝对值部分取反后加1
版本②,像谭浩强《C程序设计》(第三版)P41中所说的
例如求 -10 的补码的方法是:
一, 取-10的绝对值10
二,10的绝对值的二进制形式为 1010
三,对1010取反得 111111111111 0101 (一个整数占16位)
四,再加1得 -10的补码 111111111111 0110
问一,究竟是哪个对呢?为什么呢?能举个反例吗?谢谢。
问二,对于-127 若对于8位来说 它的补码 我用网络上的计算器得到的是 10000001
那若按版本②,即谭浩强《C程序设计》(第三版)P41中所说的 方法
那得到的是 结果是 0000001 啊
1111111 (127的绝对值)
0000000 (取反)
0000001 (加1)
即使按书中 (一个整数占16位)来看那 -65535 的补码 岂不是 0000000000000001 了吗?
毕竟 65535 对应的二进制是 1111111111111111
问三,对于 —0 的补码 是多少呢?
问四,如何通过程序或软件来查看一个数字字计算机中的补码? 展开
2个回答
展开全部
谭浩强说的方法适用于数字位数小于字长的情况,也就是符号位不能被覆盖。像-127,只有在规定字长大于8位(含符号位)的情况下,才能适用。两种方法都可以。谭浩强写的很多东西都喜欢把简单的东西复杂化,让新手反而不理解了。最直观的理解方法就是方法1,负数符号位就是1,符号位不变,把去掉符号位后的绝对值部分取反,然后加1,就是负数的补码。
追问
版本①是我自己个人认为的,不一定对啊。。您是否有验证过 版本①是否对过呢?您是怎么验证的?
问三,对于 —0 的补码 是多少呢?
问四,如何通过程序或软件来查看一个数字字计算机中的补码?
追答
你说的第一种方法恰好就是计算负数补码的一般方法。
补码中只有一个0,±0都一样,表示为全零。
虽然整型在内存中是以补码形式存储和参与计算,但读出时,全部表示为正常的原码形式。你可以自己编程将原码重新转换为补码。
展开全部
补码,其实是一个“代替负数做运算”的正数。
用十进制来说明,比较容易理解。
如果限定【仅用 2 位 10 进制数】,就可以有:
24 - 1 = 23
24 + 99 = (一百) 23
舍弃进位,保留 2 位数,+99 就和-1 是等效的。
+99,就可以代替-1 做运算。
此时,+99,就称为-1 的补数。
同理,+98,是-2 的补数。
。。。
求补数的公式:
补数 = 负数 + 10^n, n 是位数。
-----------------------
计算机使用 2 进制,补数,就改称为:补码。
求补码的公式:
补码 = 负数 + 2^n, n 是位数。
对于-1,求其 16 位补码的算法就是:
[-1]补码 =-1 + 2^16
=-1 + 65536
= 65535
= 1...(共 16 个 1)
-----------------------
用补码代替负数,计算机中,就没有负数了。
因此,在计算机中,也就没有减法运算了。
那么,硬件,就可以简化了。
这就是使用补码的意义。
如果从“原码反码符号位取反加一”来求补码,
你就不会理解“使用补码的意义”。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询