社区
C语言
帖子详情
关于二进制补码中的一些概念问题??
Guid_Z
2008-09-02 11:39:41
其实他们之间的转换公式网上有很多, 自己也知道
二进制补码到底有什么用处??
源码, 补码, 反码指的是什么, 有什么用?
最好来点形象的比喻.., 谢谢了!!
...全文
805
7
打赏
收藏
关于二进制补码中的一些概念问题??
其实他们之间的转换公式网上有很多, 自己也知道 二进制补码到底有什么用处?? 源码, 补码, 反码指的是什么, 有什么用? 最好来点形象的比喻.., 谢谢了!!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Guid_Z
2008-09-14
打赏
举报
回复
谢谢大家了..!
budweiser
2008-09-03
打赏
举报
回复
闲扯原码、反码、补码
相信大家看到这个标题都不屑一顾,因为在任何一本计算机基础知识书的第一章都有他们的解释,但是在书上我们只能找到一些简单的定义,没次看过之后不久就忘了。最近论坛里有人问起这些概念,看到很多人的回复是以前看过现在忘了去看看某某书之类,很少有给出一个合理的解释。于是本人就开始思考(虽然上帝会发笑,我还是要思考。),于是得出了以下的结论。
数值在计算机中表示形式为机器数,计算机只能识别0和1,使用的是二进制,而在日常生活中人们使用的是十进制,"正如亚里士多德早就指出的那样,今天十进制的广泛采用,只不过我们绝大多数人生来具有10个手指头这个解剖学事实的结果.尽管在历史上手指计数(5,10进制)的实践要比二或三进制计数出现的晚."(摘自<<数学发展史>>有空大家可以看看哦~,很有意思的).为了能方便的与二进制转换,就使用了十六进制(2 4)和八进制(23).下面进入正题.
数值有正负之分,计算机就用一个数的最高位存放符号(0为正,1为负).这就是机器数的原码了.假设机器能处理的位数为8.即字长为1byte,原码能表示数值的范围为
(-127~-0 +0~127)共256个.
有了数值的表示方法就可以对数进行算术运算.但是很快就发现用带符号位的原码进行乘除运算时结果正确,而在加减运算的时候就出现了问题,如下: 假设字长为8bits
( 1 ) 10- ( 1 )10 = ( 1 )10 + ( -1 )10 = ( 0 )10
(00000001)原 + (10000001)原 = (10000010)原 = ( -2 ) 显然不正确.
因为在两个整数的加法运算中是没有问题的,于是就发现问题出现在带符号位的负数身上,对除符号位外的其余各位逐位取反就产生了反码.反码的取值空间和原码相同且一一对应. 下面是反码的减法运算:
( 1 )10 - ( 1 ) 10= ( 1 ) 10+ ( -1 ) 10= ( 0 )10
(00000001) 反+ (11111110)反 = (11111111)反 = ( -0 ) 有问题.
( 1 )10 - ( 2)10 = ( 1 )10 + ( -2 )10 = ( -1 )10
(00000001) 反+ (11111101)反 = (11111110)反 = ( -1 ) 正确
问题出现在(+0)和(-0)上,在人们的计算概念中零是没有正负之分的.(印度人首先将零作为标记并放入运算之中,包含有零号的印度数学和十进制计数对人类文明的贡献极大).
于是就引入了补码概念. 负数的补码就是对反码加一,而正数不变,正数的原码反码补码是一样的.在补码中用(-128)代替了(-0),所以补码的表示范围为:
(-128~0~127)共256个.
注意:(-128)没有相对应的原码和反码, (-128) = (10000000) 补码的加减运算如下:
( 1 ) 10- ( 1 ) 10= ( 1 )10 + ( -1 )10 = ( 0 )10
(00000001)补 + (11111111)补 = (00000000)补 = ( 0 ) 正确
( 1 ) 10- ( 2) 10= ( 1 )10 + ( -2 )10 = ( -1 )10
(00000001) 补+ (11111110) 补= (11111111)补 = ( -1 ) 正确
所以补码的设计目的是:
⑴使符号位能与有效值部分一起参加运算,从而简化运算规则.
⑵使减法运算转换为加法运算,进一步简化计算机中运算器的线路设计
所有这些转换都是在计算机的最底层进行的,而在我们使用的汇编、C等其他高级语言中使用的都是原码。看了上面这些大家应该对原码、反码、补码有了新的认识了吧!
mifeixq
2008-09-03
打赏
举报
回复
补码可以把减法换成加法运算,原理就是上面说的!
xianyuxiaoqiang
2008-09-03
打赏
举报
回复
[Quote=引用楼主 Guid_Z 的帖子:]
其实他们之间的转换公式网上有很多, 自己也知道
二进制补码到底有什么用处??
源码, 补码, 反码指的是什么, 有什么用?
最好来点形象的比喻.., 谢谢了!!
[/Quote]
源码:是什么就是什么。负数就是最前面符号位为1。
反码:正的就是补码,负的就是各位取反,0换1,1换0,注意,最高位符号为不变。
补码:正的就是源码,负的就是反码+1
比如: -1 -2
以8位二进制为例
源码:10000001 10000010
反码:11111110 11111101
补码:11111111 11111110
补码这样做的好处是什么呢?
请看-1+(-2)电脑怎么做:
用源码:10000001 + (10000010)=00000011 这是什么?是-3吗?不是,是3。所以不能直接用源码做加法。
用反码:11111110 + (11111101)=11111011 这是什么?是反码的"-4"
用补码:11111111 + (11111110)=11111101 末尾减一再取反得10000011,所以结果是补码的-3。
反码为什么出错?以4位数为例,高位为符号位(括号内为绝对值):
1010 (2)取反 1101 (5)
1011 (3)取反 1100 (4)
然后 -2 + (-3) 变成了 -(5 + 4)超出8的部分舍去,得 1001,再取反得 1110,成了-6
究其原因:各位取反的两数相加:1010+0101=1111必是全1即绝对值为7,2->5,3->4,相对于8共偏差了2,然后9=1mod8,1->6,只修正了1点偏差,
结果就出现了1的偏差。补码中末尾加一就是修正了该偏差,得到正确的结果。即2->6,3->5.相对于8无偏差11=3mod8,3->5。
K行天下
2008-09-03
打赏
举报
回复
比如浮点数的表示法 就用到了相关知识,可以参考IEEE754浮点数表示法标准
11000000
2008-09-03
打赏
举报
回复
找一本计算机组成原理的书来认真看看就好了。
yangkunjie
2008-09-02
打赏
举报
回复
最基本的概念
关于为什么用补码?孙鑫老师曾经在某个教程举了个+0和-0表示的问题
在无符号的情况下,原码、反码、补码都是一样的
在有符号的情况下,补码表示的更为合理
形象的比喻还没有想到,等高手补充
2016年上半年软件设计师真题及答案(上午+下午)pdf下载
2016年上半年(5月份)软考软件设计师真题及答案解析,包括上午和下午,全网最清晰,答案最正确的真题资料。小任老师出品,必属精品。
二进制
补码
详解:计算机系统
中
的重要
概念
二进制
补码
是一种表示有符号整数的
二进制
数字表示方法。在计算机系统
中
,
二进制
补码
通常用于进行整数的加法、减法和乘法等运算。它采用了一种特殊的编码方式,使得正负数的加减法可以使用相同的硬件电路来实现,简化了计算机系统的设计和运算过程。通过本篇博客的介绍,我们了解了
二进制
补码
在计算机系统
中
的重要性和应用场景。
二进制
补码
作为一种表示有符号整数的编码方式,简化了计算机系统的设计和运算过程,提高了计算效率。理解
二进制
补码
的原理和计算方法有助于我们更深入地理解计算机系统的工作原理,并为后续的学习和应用奠定基础。
八位计算机最小
二进制
,八位
二进制
补码
最小值
好吧,小编虽然上个C++语言和VB语言基础,虽然那个爱笑的从国外留学回来的老师讲课很好很精彩,但无奈小编跟不上呀。所以下面是学习啦小编给大家总结的八位
二进制
补码
最小值和
二进制
补码
知识点。八位
二进制
补码
最小值8位
二进制
补码
表示整数的最小值是 -128, 最大值是 +127.原因:正数的
补码
就是其本身,8位
二进制
最大正整数是 0111111,也就是十进制值 127。负数的
补码
是它原数的反码加1,最小值...
二进制
补码
定点格式
总之,
二进制
补码
定点格式是一种用于在计算机
中
表示有符号整数的常见方法。它通过使用
补码
来简化整数运算,使得计算机可以方便地处理正数和负数,而不需要使用不同的表示法。这些例子演示了如何使用
二进制
补码
定点格式来表示整数和小数。这种格式通常在计算机
中
用于处理数字,使得可以在相同的规则下处理正数和负数,并且可以执行加法、减法等操作。假设我们使用8位的
二进制
补码
定点格式,其
中
前4位表示整数部分,后4位表示小数部分。在这个格式
中
,整数部分的最左边一位是符号位,0表示正数,1表示负数。
二进制
补码
详解
微处理器用
二进制
补码
系统表示有符号整数,因为它可以将减法运算转换为对减数的补数的加法运算,详解如下。
C语言
70,032
社区成员
243,245
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章