Loading [MathJax]/jax/output/CommonHTML/jax.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >数字在计算机中的表示

数字在计算机中的表示

作者头像
浪漫主义狗
发布于 2023-09-04 07:16:11
发布于 2023-09-04 07:16:11
9030
举报
文章被收录于专栏:HAUE_LYS'BlogHAUE_LYS'Blog

本文最后更新于 20 天前,其中的信息可能已经有所发展或是发生改变。

基本概念


单位概念


位(bit):计算机中最小的数字单位,是“二进制数字”(binary digit)的缩写,它只能取 两个值,因此bit被称作“二进制位”。

字节(byte): 个bit组成 个字节(byte),通常也是计算机中最常见的数据大小单位,用于表示 个二进制位的数字或字符。

在计算机中,一个bit指的就是一个二进制位,即最小的数字单位。


二进制表示


例如:

  • 在计算机中, 被表示为 。其中,每四位加入 , 便于区分位数。

具体地:

  • 表示的二进制数字是
  • 其中,前四位 表示十进制下的 ,后四位 表示十进制下的
  • 该表示法将数字 以二进制形式表示,并在前面补上了 ,使其达到了 比特位(bits)的宽度,常常使用这种形式来表示计算机存储的二进制数。

按照上述过程,理论上一个字节(8个bit位)最大表示的数值范围为:


原码、反码、补码、移码


由于现实计算中不仅存在正数,还存在负数,因此按照上节中将一个字节中所有位都用来表示数是不合理的。

因此,在一些语言中区分了有符号数无符号数,像上节中表示的是无符号数的表示方法。


原码表示法


在使用原码表示法时,二进制数的最高位表示符号位, 表示正数, 表示负数。

以使用 位二进制原码为例,表示 的二进制原码的步骤如下:

  • 的二进制表示转换为 位二进制数的原码:
  • 将该二进制数的符号位取反,即将第一位由“0”变为“1”,得到:

因此,在 位二进制原码表示法中, 的二进制原码为

按照上述过程,在原码表示下,理论上一个字节(8个bit位)最大表示的数值范围为:

需要注意,这种方式的缺点是正数和负数的加减法需要额外处理符号位,较为复杂。

例如计算:

怎么会是呢???显然是不对滴,因此我们又引入了反码。


反码表示法


反码是一种用于计算机中表示负数的二进制数表示法。在反码中:

  • 正数的反码与其原码相同;
  • 而负数则取其对应正数的原码每一位取反(0变为1,1变为0)得到。
  • 反码最高位仍作为符号位,0表示正数,1表示负数。

以使用 位二进制原码为例,表示 的二进制反码的步骤如下:

  • 的二进制表示转换为 位二进制数的原码:
  • 将该二进制数的每一位取反,即将所有的位由“0”变为“1”,得到:

因此,在 位二进制反码表示法中, 的二进制反码为

现在计算:

注意:反码直接计算的结果需要取反才能得到原码,因此对 的非符号位全部取反得到

显然是对的吧,数值是对了,但是出现了“+0”和“-0”的问题,依然不合理,因此我们最终引入了补码。


补码表示法


补码是一种计算机中表示有符号整数的二进制数表示法,也是一种将负数转化为正数的方法。在补码中:

  • 正数的补码与其原码相同;
  • 而负数则为其二进制反码加一。

以使用 位二进制原码为例,表示 的二进制反码的步骤如下:

  • 的二进制表示转换为 位二进制数的原码:
  • 将每一位取反得到反码:,然后末位 得到:

因此,在 位二进制反码表示法中, 的二进制补码为 ,由于 的二进制补码为 ,故我们将原本为 表示为最小值

按照上述过程,在补码表示下,理论上一个字节(8个bit位)最大表示的数值范围为:

现在计算:,其中多出来的一位 由于超过了补码的表示范围,故造成了溢出,最终的计算结果为

由此,我们通过补码可以将两个数的减法运算变为加法运算,但是由于符号位的存在,补码很难直接判断真值大小,因此引入移码的概念。


移码表示法


移码是一种为了方便计算二进制浮点数而设计的表示方法:

  • 将每个真值加上一个偏置值,再进行存储;

举例:

例如 的真值为

时:

注意

  • 移码与补码只差一个符号位,符号位取反两者就能相互转换。

证明

  • 正数:,相当于在第 ,即在符号位取反。
  • 负数:

,也相当于符号位取反。


IEEE 754 标准


根据国际标准 IEEE 754,任意一个二进制浮点数 可以表示成下面的形式: V = (-1)^S \times M \times 2^E

  • 表示符号位,当 为正数;当 为负数。
  • 表示有效数字,大于等于 ,小于 ,但整数部分的 不变,因此可以省略。(例如尾数为 ,那么 实际上就是,尾数首位必须是 后面紧跟小数点,如果出现 这样的情况,去掉前面的 ,移动 到首位,随着时间的发展,IEEE 754标准默认第一位为 ,故为了能够存放更多数据,就舍去了第一位,比如保存 的时候, 只保存 ,这样能够多存储一位数据)
  • 表示指数位。(用于移动小数点,所以说才称为浮点型)

比如, 对于十进制的 对应的二进制为:,相当于:。所以,。因此,对于浮点类型,最大值和最小值不仅取决于符号和尾数,还有它的阶码,所以浮点类型的大致取值范围:

  • 单精度:
  • 双精度:
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-8-14 2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
聊聊计算机的数字表示方法(上)
我:我们知道浮点数是用尾数、指数、和底数表示,计算机内是使用2进制,底数是2,而指数用移码表示……
一个无聊的人
2022/08/26
6530
聊聊计算机的数字表示方法(上)
深入理解位运算符及其在JavaScript中的应用
沉浸式趣谈
2024/03/13
1530
深入理解位运算符及其在JavaScript中的应用
一个案例搞懂原码、反码、补码,不懂得请看过来
根据冯~诺依曼提出的经典计算机体系结构框架。一台计算机由运算器,控制器,存储器,输入和输出设备组成。其中运算器,只有加法运算器,没有减法运算器(据说一开始是有的,后来由于减法器硬件开销太大,被废了 )
用户7656790
2020/08/13
1.2K0
一个案例搞懂原码、反码、补码,不懂得请看过来
浅谈计算机中数值表示:原码、反码、补码与移码
计算机科学中,数字的表示方式至关重要,因为计算机内部只能识别处理二进制数据。为了在计算机中实现对整数的表示,提出了多种数值编码方式,其中最常用的是原码、反码、补码和移码。
一条晒干的咸鱼
2024/11/19
1.4K0
浅谈计算机中数值表示:原码、反码、补码与移码
计算机的原码, 反码, 补码你了解吗?
一个数在计算机中的二进制表示形式, 叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1.
cxuan
2019/06/20
1K0
计算机的原码, 反码, 补码你了解吗?
深入理解计算机系统cp2:定点数的表示和运算
在深入理解计算机系统cp1:存储单位、数制、编码中解释了字符编码,我们知道了计算机是怎么把字符转化为二进制的;本文将解释数字编码,介绍计算机如何把数字转化为二进制,以及相关的运算问题。
Chor
2019/11/07
1.1K0
【愚公系列】软考中级-软件设计师 004-计算机系统知识(数据的表示)
原码是一种用来表示整数的二进制数的表示方法。在原码中,整数的最高位表示符号位,0代表正数,1代表负数。其余位表示整数的绝对值。
愚公搬代码
2024/01/16
2280
IEEE754浮点数的表示方法
浮点数(Floating-point Number)是一种对于实数的近似值数值表现法,由一个有效数字(即尾数)加上幂数来表示,通常是乘以某个基数的整数次幂得到。以这种表示法表示的数值,称为浮点数。表示方法类似于基数为10的科学计数法。利用浮点进行运算,称为浮点计算,这种运算通常伴随着因为无法精确表示而进行的近似或舍入。
恋喵大鲤鱼
2018/08/03
3.2K0
IEEE754浮点数的表示方法
计算机原码反码补码怎么算_-35的原码反码补码
最近花了点时间对计算机的原码,反码和补码进行了研究,对为什么要有反码和补码以及他们这么设计的原因有了一定的理解
全栈程序员站长
2022/08/03
9160
计算机原码反码补码怎么算_-35的原码反码补码
「位运算」计算机基础复习
这两天有点闲,划水太严重。没有学习啥东西,跑去翻了一下书,看到 &, |, ^, ~, << ,>> 这些位运算。然后就想起来了计算机的 原码,反码 和 补码。感觉写了两年的前端,我好像早已把这些东西抛之脑后,对于位运算我好像也没用过。写这个算是给自己复习,记录一下吧。
拾贰
2019/08/22
5380
为什么Java中int型数据取值范围是[-2^31,2^31-1]
1、为什么Java中int型数据取值范围是[-2^31,2^31-1],多么神奇的问题,网上找了很多,找不到点子上,自己瞎总结一下子。
别先生
2020/03/19
4.8K0
计算机基础之位运算 | 按位取反
程序中的所有数在计算机内存中都是以二进制的形式储存的。位操作是程序设计中对位模式或二进制数的一元和二元操作。在许多古老的微处理器上,位运算比加减运算略快,通常位运算比乘除法运算要快很多。在现代架构中,情况并非如此:位运算的运算速度通常与加法运算相同(仍然快于乘法运算)。(摘自维基百科)
宋天伦
2020/08/10
6.7K0
【5分钟+】计算机系统结构-数据表示
数据表示:数据表示是指能由计算机硬件直接识别和引用的数据类型。(例如定点数浮点数)
痴者工良
2021/04/26
9620
数字逻辑基础:原码、反码、补码
以3为例,+3对应的二进制数是00000011,-3对应的二进制数是10000011。
WuShF
2023/03/01
6730
数字逻辑基础:原码、反码、补码
计算机原理-原码、补码、反码
原码就是原来的编码,就是字面意思,而补码和反码比较奇怪,为什么需要这两种编码,意义是什么?
潇洒
2023/10/20
2390
原码、反码、补码详解
一个数在计算机中的二进制表示形式,叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号,正数为 0,负数为 1。
马修
2021/01/21
1K0
计算机基础(4)——原码、补码、反码
计算机为了区分数值的正负提出了符号位的设定,计算机用最高位存放符号,这个被称为符号位。正数的符号位为0, 负数的符号位为1。
绿水长流z
2025/01/03
1970
计算机基础(4)——原码、补码、反码
软考准备之计算机系统基础知识(中)
平时有很多碎片化时间,比如下班的地铁上,或者等待的时间,我们总喜欢拿出手机玩,这个时间也可以用来学习呢,佳爷最近想考考软件设计师,所以把自己准备的过程记录下来,也希望在碎片时间可以复习。
仇诺伊
2021/03/16
5180
软考准备之计算机系统基础知识(中)
从补码谈计算机的数值存储和展示
众所周知,二进制是一种记数系统(类比十进制),而补码就是该系统之上的编码协议。协议是为了无序信息流变得规整,让人能够控制它。从这方面猜测,补码产生的原因是为了最小化硬件设计的成本,这大概也是最初的软件定义硬件(SDH)。
lambeta
2019/05/30
1.5K0
【愚公系列】软考高级-架构设计师 004-数据的表示
在计算机科学中,所有的数据和指令都是用二进制(由0和1组成)的形式表示的。这种表示法允许计算机利用其电子组件的两种状态(开或关)来存储、处理和传输信息。理解计算机中数据的不同表示方式对于深入理解计算机工作原理和编程非常重要。
愚公搬代码
2024/05/08
1710
推荐阅读
相关推荐
聊聊计算机的数字表示方法(上)
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档