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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
MySQL Scheduler Events带来的风险
定时任务是我们开发、运维人员经常用到的,比如cron,job,schedule,events scheduler等都是为了方便我们重复执行某项工作而无需人工参与而设计,这里我要说的是MySQL数据库本身的定时任务,即events scheduler的风险案例。
星哥玩云
2022/08/17
7190
MySQL Scheduler Events带来的风险
MySQL 事件调度器
事件调度器是定时触发执行的,在这个角度上也可以称作是"定时的触发器"。触发器只是针对某个表产生的事件执行一些语句,而事件调度器则是在某一个(间隔)时间执行特定的语句/存储过程。事件是由一个特定的线程来管理的,也就是所谓的"事件调度器"。启用事件调度器后,拥有SUPER权限的账户执行 SHOW PROCESSLIST 就可以看到这个线程了。通过设定全局变量event_scheduler 的值即可动态的控制事件调度器是否启用。
用户1278550
2018/08/09
1.6K0
MySQL计划任务(事件调度器)
MySQL5.1.x版本中引入了一项新特性EVENT,顾名思义就是事件、定时任务机制,在指定的时间单元内执行特定的任务,因此今后一些对数据定时性操作不再依赖外部程序,而直接使用数据库本身提供的功能。 要查看当前是否已开启事件调度器,可执行如下SQL: SHOW VARIABLES LIKE 'event_scheduler'; 或 SELECT @@event_scheduler; 或 SHOW PROCESSLIST; 若显示: +-----------------+-------+ | Variable
wangxl
2018/03/07
1.9K0
MySQL中的事件调度器
​ 事件调度器(Event Schedule)类似于Linux中的crontab(也就是定时任务),下面介绍事件调度器的基本使用方法
俺也想起舞
2021/10/26
1.1K0
MySQL定时任务,解放双手,轻松实现自动化
Mysql 事件是一种在特定时间点自动执行的数据库操作,也可以称呼为定时任务,它可以自动执行更新数据、插入数据、删除数据等操作,无需人工干预。
码猿技术专栏
2024/01/17
4770
MySQL定时任务,解放双手,轻松实现自动化
MySQL 事件
MySQL 事件(Event)事件是根据时间表运行的任务,类似于 Unix crontab 和 Windows 定时任务。
恋喵大鲤鱼
2023/10/12
3970
一文详解MySQL中的事件调度器EVENT
MySQL中的事件调度器,EVENT,也叫定时任务,类似于Unix crontab或Windows任务调度程序。
数据和云
2020/04/01
2.3K0
MySql 定时任务的使用
  自 MySQL5.1.6起,增加了一个非常有特色的功能–事件调度器(Event Scheduler),可以用做定时执行某些特定任务(例如:删除记录、对数据进行汇总等等),来取代原先只能由操作系统的计划任务来执行的工作。更值得一提的是MySQL的事件调度器可以精确到每秒钟执行一个任务,而操作系统的计划任务(如:Linux下的CRON或Windows下的任务计划)只能精确到每分钟执行一次。对于一些对数据实时性要求比较高的应用(例如:股票、赔率、比分等)就非常适合。
授客
2019/09/11
2.2K0
MySql 定时任务的使用
MySQL定时任务(EVENT|事件)如何配置,必会技能!
  自MySQL5.1.6起,增加了一个非常有特色的功能 - 事件调度器(Event Scheduler),可以用做定时执行某些特定任务(例如:删除记录、数据统计报告、数据备份等等),来取代原先只能由操作系统的计划任务来执行的工作。   值得一提的是MySQL的事件调度器可以精确到每秒钟执行一个任务,而操作系统的计划任务(如:Linux的cron)只能精确到每分钟执行一次。对于一些对数据实时性要求比较高的应用(例如:股票、赔率、比分等)就非常适合。
陈哈哈
2021/10/13
7.7K0
MySQL从删库到跑路_高级(八)——事件
事件是用来执行定时任务的一组SQL集,在时间到时会触发。 一个事件可调用一次,也可周期性的启动,由一个特定的事件调度器线程来管理的。 事件取代了原先只能由操作系统的计划任务来执行的工作,而且MySQL的事件调度器可以精确到每秒钟执行一个任务,而操作系统的计划任务(如:Linux下的CRON或Windows下的任务计划)只能精确到每分钟执行一次。
良月柒
2019/03/20
1K0
MySQL的事件调度器:周期性任务和定时器
MySQL的事件调度器是一种在数据库中定义和执行周期性任务和定时器的机制。通过事件调度器,您可以在指定的时间间隔内自动执行某些任务,例如数据备份、数据清理等。MySQL的事件调度器基于时间触发,可以使用SQL语句定义和管理任务,并且具有高度灵活性和可配置性。
用户1289394
2024/04/02
3640
MySQL的事件调度器:周期性任务和定时器
Mysql定时器的简单使用
文章时间:2021年6月8日 15:38:29 解决问题:Mysql定时器的简单使用 代码使用 查询定时器 开启关闭状态 on为开启 off为关闭 SHOW VARIABLES LIKE 'event_scheduler'; 打开定时器 SET GLOBAL event_scheduler = ON; 删除数据(示例,请根据自身业务来) DELIMITER $$ DROP EVENT IF EXISTS deleteFrameInfo; CREATE EVENT deleteFrameInfo ON S
华创信息技术
2022/05/28
8990
Mysql定时器的简单使用
MySQL 8.0 定时任务(事件)验证
1、启动事件机制 mysql> SHOW VARIABLES LIKE 'event_scheduler'; +-----------------+-------+ | Variable_name | Value | +-----------------+-------+ | event_scheduler | ON | +-----------------+-------+ 1 row in set (0.00 sec) mysql> MySQL 8.0事件机制是默认开启的。 2、准备一张数
程裕强
2021/11/15
1.6K0
MySQL 8.0 定时任务(事件)验证
定时删除过期数据(MySQL数据表)
上面代码表示从2019-05-29 17:33:43起每一天执行一次del_data_count这个存储过程,并带上参数 5. 创建存储过程
李玺
2021/11/22
5.1K0
MySQL定时任务(event事件)
2 事件的优缺点 2.1 优点 一些对数据定时性操作不再依赖外部程序,而直接使用数据库本身提供的功能。 可以实现每秒钟执行一个任务,这在一些对实时性要求较高的环境下就非常实用了。
星哥玩云
2022/08/18
2.7K0
使用MySQLl事件定时执行岗位七天下线任务
  最近做了一个招聘的项目,在项目中有一个定时下线的需求。在做之前我一直在考虑到底使用window 服务,还是使用调度,最终我选择使用mysql定时事件,因为这样简单方便。
追逐时光者
2022/02/15
3710
mysqldump命令详解 Part 2- 建立触发器 事件
前面说了MySQL Linux平台和Windows平台的安装 下面开始是MySQL的一些学习笔记 前面我们说了如果构造数据 这节开始说MySQL 的备份 环境为MySQL 5.7.25 在解释命令之前
bsbforever
2020/08/19
6320
mysqldump命令详解 Part 2- 建立触发器 事件
MySQL的定时任务详解
delimiter关键字的使用:在mysql客户端中分隔符默认是分号(;)。如果一次输入的语句较多,并且语句中间有分号,这时需要新指定一个特殊的分隔符。可以使用“delimiter //”,这样改变了分隔符。其实就是告诉mysql解释器,该段命令是否已经结束了,mysql是否可以执行了。
程序员云帆哥
2022/05/12
3.4K0
使用 MySQL Scheduler 和 Event 周期性创建数据表
使用 MySQL Scheduler 和 Event 周期性创建数据表,下面提供的是按月建表计划任务及事件通过 ON SCHEDULE EVERY 1 MINUTE 语句完成。
柳公子
2018/09/17
1.1K0
运维实践|采集MySQL数据出现many connection errors
最近在做OGG结构化数据采集工作,在数据采集过程中,数据库总是出现连接错误,导致阻塞。并提示以下错误:
六月暴雪飞梨花
2023/11/29
4220
运维实践|采集MySQL数据出现many connection errors
相关推荐
MySQL Scheduler Events带来的风险
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档