1. 原码,反码,补码的基础概念和计算方法

原码,反码,补码只是计算机存储数字的一种方式。

1. 原码

原码就是用第一位表示符号位,其余位表示值,比如8位的二进制数:

[+1]原 = 0000 0001
[-1]原 = 1000 0001

因为第一位为符号位,所以8位二进制数的取值范围为:

[1111 1111 , 0111 1111][-127,+127]

2. 反码

反码是在原码的基础上符号位不变,其余的位数取反,比如:

[+3]原 = 0000 0011原 = 0111 1100反
[-3]原 = 1000 0011原 = 1111 1100反

3. 补码

正数的补码为它本身,比如:

[+3]原 = 0000 0011原 = 0000 0011补

负数的补码为其反码+1

[-3]原 = 1000 0011原 = 1111 1100反 = 1111 1101补

2. 为何要用原码,反码,补码:

通过上述我们知道计算机有三种编码方式,对于正数三种编码方式的结果都相同

[+3]原 = 0000 0011原 = 0000 0011反 = 0000 0011补
[-3]原 = 1000 0011原 = 1111 1100反 = 1111 1101补

首先, 因为人脑可以知道第一位是符号位, 在计算的时候我们会根据符号位, 选择对真值区域的加减。 但是对于计算机, 辨别"符号位"显然会让计算机的基础电路设计变得十分复杂! 于是人们想出了将符号位也参与运算的方法。
我们知道, 根据运算法则减去一个正数等于加上一个负数, 即: 3-3 = 3 + (-3) = 0 , 所以机器可以只有加法而没有减法, 这样计算机运算的设计就更简单了。

原码将符号位参与运算的计算方法如下:

3-3 = 3+(-3) = 0000 0011原 + 1000 0011原 = 1000 0110原 = -6

如果用原码表示让符号位参与运算,对于减法来说结果显然不正确,这就是计算机内部不适用原码表示一个数的原因。
反码的计算方法如下:

3-3 = 3+(-3) = 0000 0011原 + 1000 0011原 = 0000 0011反 +1111 1100反 = 1111 1111反 = 1000 0000原 = -0

可以看到用反码计算减法结果真值部分是正确的,但数字0却有两种编码方式+0与-0,显然0带符号位没有任何意义。而且会有0000 0000原和1000 0000原两个编码表示0。
补码的出现就解决了0的符号以及两个编码的问题
补码的计算方法如下

3-3 = 3+(-3) = 0000 0011原 + 1000 0011原 = 0000 0011反 +1111 1100反 = 0000 0011补 + 1111 1101补 = 0000 0000补 = 0000 0000原 = 0

这样0用[0000 0000]表示,而以前出现问题的-0则不存在了。而且可以用[1000 0000]表示-128。

(-1)+(-127) = 1000 0001原 + 1111 1111原 = 1111 1110反 +1000 0000反 = 1111 1111补 + 1000 0001补 = 1000 0000补 = -128

使用补码运算修复了0的编码表示,而且还能表示一个最低数,-128并没有原码和反码表示。8位二进制数表示的范围为[-128,127],也就是[−27,27−1][-2^7,2^7-1][−27,27−1],其他同理。

参考:https://blog.csdn.net/qq_42001403/article/details/100142480

正负数在计算机中的存储方式相关推荐

  1. 负数在计算机中的存储方式

    一.符号位 符号位为最高位.最高位为 1 时表示负数,为 0 时表示正数. 正数在内存中是以原码的形式储存,负数在内存是以补码的形式存储. 二.负数的计算 计算方式:原码 --> 反码 --&g ...

  2. 负数在计算机中的储存方式

    最近在学习位运算符时,发现负数在做带符号位的右移运算符时,结果与想象中的大不一样,经过查阅资料之后发现,原来这一切源自负数在计算机中的储存方式 负数在计算机中是以补码的形式储存的 注意: 本文为了简化 ...

  3. 负数在计算机中的存储和表示

    1.负数在计算机中的存储 计算机中的有符号数有三种表示方法,即原码.反码和补码.三种表示方法均有符号位和数值位两部分,符号位都是用0表示"正",用1表示"负", ...

  4. 负数在计算机中的存储——补码

    首先,负数要在计算机中正确存储,其对应变量必须声明为有符号数.有符号数的最高位为符号位:0代表正数,1代表负数:后面的位则为数值位. 现在来研究一个简单的负数-1在一个字节(8位)中的存储. 按照一般 ...

  5. 正负数在计算机中的表示(原码反码补码)及位运算

    负数在现代计算机里一般用补码表示(正数也是) 正数补码就是它的原码 负数补码: 最高位是符号位,其余位为对应整数的原码取反再+1 如:1000 0000还原为原码:最高位是1,表示负数,剩余的各位取反 ...

  6. 负数在计算机中怎样存储

    一.什么是原码.反码.补码? 原码:10进制转换成2进制是原码,只不过正数的原码是本身符号位为0,负数的原码符号位为1(以下篇幅均以单字节为例:10进制1的原码是0000 0001,10进制-1的原码 ...

  7. 数据在计算机中的存储方式

     数据有数值型和非数值型两类,这些数据在计算机中都必须以二进制形式表示.一串二进制数既可表示数量值,也可表示一个字符.汉字或其他.一串二进制数代表的数据不同,含义也不同.这些数据在计算机的存储设备 ...

  8. 【编程基础】浮点数在计算机中的存储 —— IEEE 754标准

    寻求更好的阅读体验,请移步 :浮点数在计算机中的存储 -[Mculover666的个人博客]. 用于存储小数的数据类型是有单精度浮点型(float)和双精度浮点型(double),那么,浮点数在计算机 ...

  9. 探索“小数”在计算机中的存储

    本文介绍了小数在计算机中的存储方式,第一种为定点方式,这种方式很少遇到,但在Matlab中有涉及,见图文<Matlab与线性代数–显示格式的设置>.第二种为浮点方式,一个浮点数由阶码和尾数 ...

最新文章

  1. java版b2b2c社交电商spring cloud分布式微服务(五)springboot整合 beatlsql
  2. 常用的Meta标签写法和作用
  3. python大数据搜索_python语言-用 Python 实现一个大数据搜索引擎
  4. cxf 本地wsdl_cxf使用wsdl文件生成代码
  5. Lucene全文检索过程
  6. C程序的储存空间是如何分配?
  7. Python获取当前目录
  8. 淘宝正在清洗35岁以上的老人
  9. Listview 的应用 Day04 2014-0605
  10. 经验总结24--捕捉异常的重要性
  11. jquery事件绑定和解除绑定bind、unbind、one
  12. offset must be non-negative and no greater than buffer length (0)(tensorflow.keras)
  13. 读《scikiit-learn机器学习》黄永昌第二章
  14. 畅捷通魔方MP70初体验
  15. 上海市城镇生育保险办法
  16. 爬虫【11】易班刷网薪系统
  17. PRN(20210421):Task-Free Continual Learning
  18. clappr:可扩展网页媒体播放器使用(在vue中的使用)
  19. Excel里如何设置保留几位小数
  20. WPS文档消除格式并消除大片空白格

热门文章

  1. arcgis 提取值到点 如果该点的栅格值缺失怎么办?怎么把最近点的值赋给它?
  2. 如何用viso画波浪线、以及带箭头的波浪线。
  3. NopCommerce 在Category 显示Vendor List列表
  4. 远程入侵原装乘用车(上)
  5. 解决mac 休眠后唤醒死机问题
  6. 列表数据导出成Excel
  7. order by 按照指定顺序排序或自定义顺序排序
  8. 网络请求数据demo
  9. Linux无界面创建Oracle数据库实例
  10. 排序算法--快排的优化