原码反码和补码的区别

无形之刃、 2019-11-29 03:29:03
补码的表示与原码和反码的相同之处是最高位用0表示正,1表示负;不同之处是,补码最高位1既表示其为负数,也表示数字1.
...全文
2282 84 打赏 收藏 转发到动态 举报
写回复
用AI写文章
84 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
可以了解下 同余定理
随薪锁欲_ 2019-12-12
  • 打赏
  • 举报
回复
为何会有反码和补码 计算机内的表示和运算都使用补码 为何要使用原码, 反码和补码 反码: 使计算机中只有加法 补码: 去除 -0 +0 表示一个最低数 eg: 1 - 1 = 1 + (-1) = [00000001]原 + [10000001]原 = [10000010]原 = -2 如果用原码表示, 让符号位也参与计算, 显然对于减法来说, 结果是不正确的.这也就是为何计算机内部不使用原码表示一个数. 1 - 1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原 = [0000 0001]反 + [1111 1110]反 = [1111 1111]反 = [1000 0000]原 = -0 发现用反码计算减法, 结果的真值部分是正确的. 而唯一的问题其实就出现在”0”这个特殊的数值上. 虽然人们理解上+0和-0是一样的, 但是0带符号是没有任何意义的. 而且会有[0000 0000]原和[1000 0000]原两个编码表示0. 1-1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原 = [0000 0001]补 + [1111 1111]补 = [0000 0000]补=[0000 0000]原 使用补码, 不仅仅修复了0的符号以及存在两个编码的问题, 而且还能够多表示一个最低数. 这就是为什么8位二进制, 使用原码或反码表示的范围为[-127, +127], 而使用补码表示的范围为[-128, 127].
季冄 2019-12-12
  • 打赏
  • 举报
回复
原码 1010000 补码 1010001 反码 1101110
cpongo3 2019-12-05
  • 打赏
  • 举报
回复
6666666
小林少爷 2019-12-04
  • 打赏
  • 举报
回复
正数的反码与补码和原数相同 负数的反码:除了符号位,其他位置按位取反 负数的补码:反码的最后一位+1
weixin_45962054 2019-12-03
  • 打赏
  • 举报
回复
学习了,多谢
恭喜WE 2019-12-03
  • 打赏
  • 举报
回复
正数的是原码。负数是它本身绝对值的反码加一(就是补码) 比如1的原码00000001,那么它的反码就是11111110,补码就是11111111,补码代表的就是-1 一般原码用来表示正数,补码用来表示负数 二进制最左边的那个数代表着正负符号,1是负数,0是整数
云声风语 2019-12-03
  • 打赏
  • 举报
回复
刚好在看二进制数,学习了,
发记 2019-12-03
  • 打赏
  • 举报
回复
多多看书哦哦
固安琪 2019-12-03
  • 打赏
  • 举报
回复
原码是这个数二进制本身,求补码有一个简单的求法:从右往左数,遇到的第一个1,这个1和它右边的所有0都不变,这个1左边的所有1和0全部取反
BryantGuo_ 2019-12-03
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复
引用 87 楼 Chu_Wang的回复:
正数原码反码补码一致 负数, 原码符号位为1,其余位是该负数的绝对值对应的二进制原码 反码,在原码的基础上,符号位不变,其余位取反 补码,在反码的基础上,在末尾加1
当然,这是对有符号数而言
  • 打赏
  • 举报
回复
正数原码反码补码一致 负数, 原码符号位为1,其余位是该负数的绝对值对应的二进制原码 反码,在原码的基础上,符号位不变,其余位取反 补码,在反码的基础上,在末尾加1
  • 打赏
  • 举报
回复
反码是原码逐位取反,补码是反码加1,但是这是对负数而言,正数不变
xiaoxiangqing 2019-12-02
  • 打赏
  • 举报
回复
计算机原理就有讲过这些
Yuzer 2019-12-02
  • 打赏
  • 举报
回复
反码 = 源码取反,补码 = 反码加一
小鱼仙倌rhy 2019-12-02
  • 打赏
  • 举报
回复
原码反码和补码区别 我来答共1条回答 路银庚 LV.42018-04-13 原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值,如 [+1]原 = 0000 0001 [-1]原 = 1000 0001 正数的反码是其本身 负数的反码是在其原码的基础上, 符号位不变,其余各个位取反. [+1] = [00000001]原 = [00000001]反 [-1] = [10000001]原 = [11111110]反 补码的表示方法是: 正数的补码就是其本身 负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1) [+1] = [00000001]原 = [00000001]反 = [00000001]补 [-1] = [10000001]原 = [11111110]反 = [11111111]补 正数的源码,反码,补码都一样
桃花心木_ 2019-12-02
  • 打赏
  • 举报
回复
正数的补码就是反码 负数的补码=反码+1
BryantGuo_ 2019-12-01
  • 打赏
  • 举报
回复
微微凉的路风 2019-12-01
  • 打赏
  • 举报
回复
正数的原码,反码,补码都一样, 负数的反码是由原码符号位不变,其它数值取反得到的,而补码是由原反码的值末位加1取得的 0有补码,+0,–0的补码都一样,只有一种表示形式。
加载更多回复(64)

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧