浮点数表示的数值范围详解(一)

news2024/12/23 10:45:34

学生问了一个问题:
在这里插入图片描述
这个问题如果想讲明白,需要将基础知识复习一下。

一、定点数

1、什么是定点数?

定点数指小数点在数中位置固定不变的数。

详细解释:计算机中小数点的位置固定不变,小数点前、后的数字,分别用二进制表示,组合起来,就可以在计算机中存储起来,这种表示方式叫做定点表示法,用这种方法表示的数字叫做定点数

「定」是指固定的意思
「点」是指小数点,小数点位置固定
即定点数

2、定点数表示数字

数字分三种情况:
纯整数: 整数100,小数点其实在最后一位,所以忽略不写
纯小数: 0.123,小数点固定在最高位
整数+小数:3.14、21.34,345.67小数点在指定某个位置

以下都以 1 个字节(8 bit)表示

(1)纯整数表示

对于纯整数,小数点固定在最低位
100(十) = 01100100(二)

将十进制数100转换为二进制,可以使用除2取余法:
首先,将100除以2,商为50,余数为0。
接着,将50除以2,商为25,余数为0。
然后,将25除以2,商为12,余数为1。
继续,将12除以2,商为6,余数为0。
再次,将6除以2,商为3,余数为0。
然后,将3除以2,商为1,余数为1。
最后,将1除以2,商为0,余数为1。

现在,从最后一个余数开始,依次写下所有余数,得到的结果就是100的二进制表示。
100的二进制表示为1100100

(2)纯小数表示

纯小数,如 0.124,由于小数点固定在最高位
0.124(十)=0.00111101(二)

要将小数0.124转换为二进制,可以使用乘2取整法:
开始时,将0.124乘以2,得到0.248,这意味着第一个二进制位是0。
然后,将0.248的小数部分继续乘以2,得到0.496,所以第二位是0。
接下来,将0.496的小数部分继续乘以2,得到0.992,所以第三位是0。
然后,将0.992的小数部分继续乘以2,得到1.984,所以第四位是1。
然后,将0.984的小数部分继续乘以2,得到1.968,所以第五位是1。
然后,将0.968的小数部分继续乘以2,得到1.936,所以第六位是1。
然后,将0.936的小数部分继续乘以2,得到1.872,所以第七位是1。
最后,将0.872的小数部分继续乘以2,得到1.744,所以第八位是1。

因此,0.124的二进制表示为0.00111101。

(3)整数+小数 表示

以 1 个字节(8 bit)为例,约定前 5 位表示整数部分,后 3 位表示小数部分
2.5定点数表示:
2.5(十)=00010.100(二)

将2.5转换为二进制,分别转换整数部分和小数部分,然后将它们合并:
整数部分5位表示:2.5的整数部分是2,其二进制表示为10。由于要用5位表示,需要在前面补零,所以整数部分的二进制表示为00010。
小数部分3位表示:0.5的二进制表示为0.1。由于要用3位表示,需要将小数点后的位数补齐,所以小数部分的二进制表示为100。
因此,2.5的二进制表示为00010.100。

15.225的二进制表示为01111.001

定点数表示数字过程:
(1)在有限的 bit(位) 宽度下,先约定小数点的位置
(2)整数部分和小数部分,分别转换为二进制表示
(3)将两部分二进制组合起来,即是结果

3、问题

约定了前 5 位表示整数部分,后 3 位表示小数部分,
整数部分的二进制最大值只能是 11111,即十进制的 31
小数部分的二进制最大只能表示 0.111,即十进制的 0.875。
用定点数表示的小数,不仅数值的范围表示有限,而且其精度也很低

如果想要表示更大范围的值呢?
提出了使用**“浮点数”**的方式表示数字

二、原码、反码、补码与移码

由于计算机的硬件决定,任何存储于计算机中的数据,其本质都是以二进制码存储。
根据冯·诺依曼提出的计算机体系结构框架,一台计算机由运算器、控制器、存储器、输入和输出设备组成。
其中运算器只有加法运算器,没有减法运算器

所以计算机中的减法是通过加法实现的,减去一个数可以看作加上这个数的相反数,必须有负数,所以引入一个符号位。
符号位在内存中存放的最左边一位,如符号位为0,则说明该数为正;若为1,则说明该数为负。

原码、反码、补码的产生过程就是为了解决计算机做减法和引入符号位的问题。

1、原码

是最简单的机器数表示法,用最高位表示符号位,其他位存放该数的二进制的绝对值
5的二进制:0101
23的二进制:00010111

负数:
如:四位表示,带符号位,1010,最高位为1表示这是一个负数,其它三位010
在这里插入图片描述
所以1010表示十进制数-2。
如图:
在这里插入图片描述
运算:
0001+0010=0011,1+2=3 正确
0000+1000=1000,+0+(-0)=-0 错误
0001+1001=1010,1+(-1)=-2 错误

正数与正数相加正确,就是一个很简单的二进制加法,而正数与负数相加,或负数与负数相加,错误,这是符号位引起的。

总结: 原码不便进行加减运算。

2、反码

一个数加上该数的相反数应该等于0
但原码是一个数加上它的相反数不等于0
0001+1001=1010,1+(-1)=-2,提出“反码”

反码: 正数的反码还是等于原码;负数的反码就是它的原码除符号位外,按位取反
如:3是正数,反码与原码相同,则可以表示为四位0011;
-3的原码是1011,符号位保持不变,低三位按位取反,所以-3的反码为1100。
在这里插入图片描述
运算:
0001+1110=1111,1+(-1)=-0; 正确
1110+1100=1010,(-1)+(-3)=-5。 错误

两个负数相加的出错

3、补码

补码:正数的补码等于它的原码;负数的补码等于反码+1
1 原码 0001
2 原码 0010
0001+0010=0011 1+2=3 正确

1 原码 0001
-1原码 1001 反码1110 补码 1111
0001+1111=0000 1+(-1)=0 正确

-1原码 1001 反码1110 补码 1111
-3原码 1011 反码1100 补码 1101
1111+1101=1100 (-1)+(-3)=-4 正确

补码的出现是为了解决负数计算的问题

补码原理-- 模 同余数
自行查看相关文章

4、移码(增码或偏置码)

移码是在原码的基础上加上一个偏移量(K)的表示。对于有符号数,移码的表示范围通常在-K到K之间。移码的目的是将有符号数转换为无符号数来进行计算和比较。

移码 : 补码的符号位取反

浮点数的表示是采用尾数+阶码的方式表示, N=M*2^E, 其中阶数E采用移码表示。

移码的表示方法是:
[+1] = [0001]原 = [0001]反 = [0001]补 = [1001]移
[-1] = [1001]原 = [1110]反 = [1111]补 = [0111]移

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1601734.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一种动态防御策略——移动目标防御(MTD)

文章速览: 1、高级规避攻击 2、用移动目标防御对抗欺骗 常见做法操作系统和应用程序才是真正的战场打破游戏规则 网络攻击的技术变得愈发难测,网络攻击者用多态性、混淆、加密和自我修改乔装他们的恶意软件,以此逃避防御性的检测&#xf…

正基塑业邀您参观2024长三角快递物流供应链与技术装备展览会

2024.7.8-10 杭州国际博览中心 科技创新,数字赋能 同期举办:数字物流技术展新能源商用车及物流车展 电商物流包装展 冷链物流展 展会介绍 2024长三角快递物流供应链与技术装备展览会(杭州),于2024年7月8-10日在杭州…

机器学习中的激活函数

激活函数存在的意义: 激活函数决定了某个神经元是否被激活,当这个神经元接收到的信息是有用或无用的时候,激活函数决定了对这个神经元接收到的信息是留下还是抛弃。如果不加激活函数,神经元仅仅做线性变换,那么该神经网…

【C++】priority_queuepriority_queue模拟实现

个人主页 : zxctscl 如有转载请先通知 文章目录 1. priority_queue的介绍2. priority_queue的使用3. 函数模板与类模板4. 仿函数5. priority_queue模拟实现5.1 push5.2 pop5.3 empty5.4 size5.5 top5.6 仿函数实现大小堆5.7 实现自定义类型的优先级队列 6. 附模拟实…

Linux的启动过程,了解一下?

Linux 系统启动过程 linux启动时我们会看到许多启动信息。 Linux系统的启动过程并不是大家想象中的那么复杂,其过程可以分为5个阶段: 内核的引导。运行 init。系统初始化。建立终端 。用户登录系统。 init程序的类型: SysV: init, CentO…

Linux系统编程开发环境搭建

开发环境搭建 桥接网络(Bridged Network)、网络地址转换(NAT, Network Address Translation)和主机模式网络(Host-only Networking) 在虚拟化环境中,常见的三种网络模式是桥接网络&#xff08…

好用的Python开发工具合集

​ Python是一种功能强大且易于学习的编程语言,被广泛应用于数据科学、机器学习、Web开发等领域。随着Python在各个领域的应用越来越广泛,越来越多的Python开发工具也涌现出来。但是,对于新手来说,选择一款合适的Python开发工具可…

OpenHarmony开发实例:【鸿蒙.bin文件烧录】

使用HiBurn烧录鸿蒙.bin文件到Hi3861开发板 鸿蒙官方文档的“Hi3861开发板第一个示例程序”中描述了——如何使用DevEco Device Tool工具烧录二进制文件到Hi3861开发板; 本文将介绍如何使用HiBurn工具烧录鸿蒙的.bin文件到Hi3861开发板。 获取HiBurn工具 通过鸿蒙…

云仓酒庄品酒师培训破大世界基尼斯纪录,市场专业化趋势势如破竹

近日,云仓酒庄举办的品酒师培训活动成功创下大世界基尼斯纪录,这一荣誉不仅彰显了云仓酒庄在酒类培训领域的专业实力,更折射出酒类市场专业化趋势的势如破竹。随着酒类市场的日益成熟和消费者品鉴需求的提升,酒类市场专业化趋势对…

通义千问:官方开放API开发基础

目录 一、模型介绍 1.1主要模型 1.2 计费单价 二、前置条件 2.1 开通DashScope并创建API-KEY 2.2 设置API-KEY 三、基于DashScope SDK开发 3.1 Maven引入SDK 3.2 代码实现 3.3 运行代码 一、模型介绍 通义千问是由阿里云自主研发的大语言模型,用于理解和分…

Vitis HLS 学习笔记--BLAS库之WideType

目录 1. WideType 数据类型 2. WideType 类模板参数 2.1 SFINAE技术 3. WideType 类中的函数 3.1 operator[](unsigned int p_Idx) 3.2 operator(const WideType& p_w) const 3.3 getValAddr() 3.4 operator const t_TypeInt() 4. 总结 1. WideType 数据类型 在 …

Java+saas模式 智慧校园系统源码Java Android +MySQL+ IDEA 多校运营数字化校园云平台源码

Javasaas模式 智慧校园系统源码Java Android MySQL IDEA 多校运营数字化校园云平台源码 智慧校园即智慧化的校园,也指按智慧化标准进行的校园建设,按标准《智慧校园总体框架》中对智慧校园的标准定义是:物理空间和信息空间的有机衔接&#…

前端学习<四>JavaScript基础——26-闭包

闭包的引入 我们知道,变量根据作用域的不同分为两种:全局变量和局部变量。 函数内部可以访问全局变量和局部变量。 函数外部只能访问全局变量,不能访问局部变量。 当函数执行完毕,本作用域内的局部变量会销毁。 比如下面这样…

Ubuntu20从0开始选择合适版本手动安装cuda,torch-geometric,jax

一个全新的ubuntu20台式机,在Additional Drivers安装nvidia-470-server(一开始安装450,cunda版本只能到11.0,torch有些库用不了,可以直接切换点击Apply Changes重启就行) nvidia-smi查看CUDA Version可到…

Redis 配置与使用 (Linux 虚拟机Windows客户端)

Centos7 安装Redis详细教程 - JcongJason - 博客园 (cnblogs.com) 安装 下载redis安装包并解压 # 下载,我是在root下执行的下载,所以我的下载目录为:/root/redis-5.0.5,这里按照自己的实际情况调整 wget https://download.redi…

JVM、maven、Nexus

一、jvm简介 1.应用程序申请内存时出现的三种情况: ①OOM:内存溢出,是指应用系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用到的内存大于能提供的最大内存。此时程序就运行不了,系统会提示内存溢出&#xff0c…

css3实现微信扫码登陆动画

在做微信扫码登陆时,出现一个背景光图上下扫码动画,用css3图片实现。 实现原理: 1.准备一个渐变的背景.png图 2.css动画帧实现动画 看效果: css代码: #wx-scan{position: absolute;top:0px;left: 50%;z-index: 3;ma…

错误分析 (Machine Learning研习十九)

错误分析 您将探索数据准备选项,尝试多个模型,筛选出最佳模型,使用 Grid SearchCV微调其超参数,并尽可能实现自动化。在此,我们假设您已经找到了一个有前途的模型,并希望找到改进它的方法。其中一种方法就…

数据密集型应用系统设计 PDF 电子书(Martin Kleppmann 著)

简介 《数据密集型应用系统设计》全书分为三大部分: 第一部分,主要讨论有关增强数据密集型应用系统所需的若干基本原则。首先开篇第 1 章即瞄准目标:可靠性、可扩展性与可维护性,如何认识这些问题以及如何达成目标。第 2 章我们比…

JQuery(四)---【使用JQuery实现动画效果】

目录 前言 一.隐藏和显示 1.1使用方法 1.2案例演示(1) 1.3隐藏/显示效果一键切换 二.淡入淡出效果 2.1使用方法 2.2案例演示(fadeIn) 2.3案例演示(fadeOut) 2.4案例演示(fadeToggle) 2.5案例演示(fadeTo) 三.滑动 3.1使用方法 3.2案例演示(slideDown) 3.3案例演示…