正负数在计算机中的存储方式
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 时表示负数,为 0 时表示正数. 正数在内存中是以原码的形式储存,负数在内存是以补码的形式存储. 二.负数的计算 计算方式:原码 --> 反码 --&g ...
- 负数在计算机中的储存方式
最近在学习位运算符时,发现负数在做带符号位的右移运算符时,结果与想象中的大不一样,经过查阅资料之后发现,原来这一切源自负数在计算机中的储存方式 负数在计算机中是以补码的形式储存的 注意: 本文为了简化 ...
- 负数在计算机中的存储和表示
1.负数在计算机中的存储 计算机中的有符号数有三种表示方法,即原码.反码和补码.三种表示方法均有符号位和数值位两部分,符号位都是用0表示"正",用1表示"负", ...
- 负数在计算机中的存储——补码
首先,负数要在计算机中正确存储,其对应变量必须声明为有符号数.有符号数的最高位为符号位:0代表正数,1代表负数:后面的位则为数值位. 现在来研究一个简单的负数-1在一个字节(8位)中的存储. 按照一般 ...
- 正负数在计算机中的表示(原码反码补码)及位运算
负数在现代计算机里一般用补码表示(正数也是) 正数补码就是它的原码 负数补码: 最高位是符号位,其余位为对应整数的原码取反再+1 如:1000 0000还原为原码:最高位是1,表示负数,剩余的各位取反 ...
- 负数在计算机中怎样存储
一.什么是原码.反码.补码? 原码:10进制转换成2进制是原码,只不过正数的原码是本身符号位为0,负数的原码符号位为1(以下篇幅均以单字节为例:10进制1的原码是0000 0001,10进制-1的原码 ...
- 数据在计算机中的存储方式
数据有数值型和非数值型两类,这些数据在计算机中都必须以二进制形式表示.一串二进制数既可表示数量值,也可表示一个字符.汉字或其他.一串二进制数代表的数据不同,含义也不同.这些数据在计算机的存储设备 ...
- 【编程基础】浮点数在计算机中的存储 —— IEEE 754标准
寻求更好的阅读体验,请移步 :浮点数在计算机中的存储 -[Mculover666的个人博客]. 用于存储小数的数据类型是有单精度浮点型(float)和双精度浮点型(double),那么,浮点数在计算机 ...
- 探索“小数”在计算机中的存储
本文介绍了小数在计算机中的存储方式,第一种为定点方式,这种方式很少遇到,但在Matlab中有涉及,见图文<Matlab与线性代数–显示格式的设置>.第二种为浮点方式,一个浮点数由阶码和尾数 ...
最新文章
- java版b2b2c社交电商spring cloud分布式微服务(五)springboot整合 beatlsql
- 常用的Meta标签写法和作用
- python大数据搜索_python语言-用 Python 实现一个大数据搜索引擎
- cxf 本地wsdl_cxf使用wsdl文件生成代码
- Lucene全文检索过程
- C程序的储存空间是如何分配?
- Python获取当前目录
- 淘宝正在清洗35岁以上的老人
- Listview 的应用 Day04 2014-0605
- 经验总结24--捕捉异常的重要性
- jquery事件绑定和解除绑定bind、unbind、one
- offset must be non-negative and no greater than buffer length (0)(tensorflow.keras)
- 读《scikiit-learn机器学习》黄永昌第二章
- 畅捷通魔方MP70初体验
- 上海市城镇生育保险办法
- 爬虫【11】易班刷网薪系统
- PRN(20210421):Task-Free Continual Learning
- clappr:可扩展网页媒体播放器使用(在vue中的使用)
- Excel里如何设置保留几位小数
- WPS文档消除格式并消除大片空白格