关于数制及其转换

news2024/9/21 5:34:11

关于数制及其转换

从1除以10谈起

十进制计算

1 ÷ 10 = 0.1

商是有限小数

用二进制计算 是无限循环小数:

1 ÷ 1010 = 0.00011001100110011……

1/10 是无法用二进制小数精确表示的。十进制小数转换成二进制有可能无限循环。

十进制数0.1转换成二进制为0.000110001100011……

十进制小数转换成二进制

以小数点为界,拆分整数部分和纯小数部分转换

整数部分转换二进制,使用的是“除2取余法”。

小数部分的转换不同于整数部分,使用的是“乘2取整法”

例如:

 下面给出python实现十进制小数转换成二进制的源码:

#十进制浮点数转二进制函数
def dectbin(num):
    # 判断是否为浮点数
    if num == int(num):
        # 若为整数
        integer = '{:b}'.format(int(num))
        return integer
    else:
        # 若为浮点数
        # 取整数部分
        integer_part = int(num)
        # 取小数部分
        decimal_part = num - integer_part
        # 整数部分进制转换
        integercom = '{:b}'.format(integer_part)  #{:b}.foemat中b是二进制
        # 小数部分进制转换
        tem = decimal_part
        tmpflo = []
        # for i in range(accuracy):
        A = True
        while A:
            tem *= 2
            tmpflo += str(int(tem))  #若整数部分为0则二进制部分为0,若整数部分为1则二进制部分为1 #将1或0放入列表
            if tem > 1 :   #若乘以2后为大于1的小数,则要减去整数部分
                tem -= int(tem)
            elif tem < 1:  #乘以2后若仍为小于1的小数,则继续使用这个数乘2变换进制
                pass
            else:    #当乘以2后正好为1,则进制变换停止
                break
        flocom = tmpflo
        return integercom + '.' + ''.join(flocom)


number = float(input("输入一个正的浮点数:"))
result = dectbin(number)
print(f'{number}的二进制数为:{result}')

为什么大多数的十进制小数都不能精确地表示为二进制小数?

浮点算术:争议和限制 https://docs.python.org/zh-cn/3/tutorial/floatingpoint.html

浮点数在计算机硬件中以2进制(二进制)分数表示。例如,十进制分数0.125的值为1/10+2/100+5/1000,二进制分数0.001的值为0/2+0/4+1/8。这两个分数具有相同的值,唯一真正的区别是第一个分数以10为基数的分数表示法书写,第二个分数以2为基数。

不幸的是,大多数的十进制小数都不能精确地表示为二进制小数。这导致在大多数情况下,你输入的十进制浮点数都只能近似地以二进制浮点数形式储存在计算机中。

表示性错误 是指某些(其实是大多数)十进制小数无法以二进制(以 2 为基数的计数制)精确表示这一事实造成的错误。 这就是为什么 Python(或者 Perl、C、C++、Java、Fortran 以及许多其他语言)经常不会显示你所期待的精确十进制数值的主要原因。

因此,程序员需要注意,浮点数交给计算机存储的时候,可能会有精度丢失问题!

浮点数在计算机中是如何表示的?

只要给出:符号(S)、阶码部分(E)、尾数部分(M) 这三个维度的信息,一个浮点数的表示就完全确定下来了,所以float和double这两种类型的浮点数在计算机中的存储结构就表示成下图所示这个样子:

1、符号部分(S)

0:正;1:负

2、阶码部分(E)(指数部分):

对于float型浮点数,指数部分8位,考虑可正可负,因此可以表示的指数范围为-127 ~ 128;

对于double型浮点数,指数部分11位,考虑可正可负,因此可以表示的指数范围为-1023 ~ 1024。

3、尾数部分(M):

浮点数的精度是由尾数的位数来决定的:

对于float型浮点数,尾数部分23位,换算成十进制就是 2^23=8388608,所以十进制精度只有6 ~ 7位;

对于double型浮点数,尾数部分52位,换算成十进制就是 2^52 = 4503599627370496,所以十进制精度只有15 ~ 16位。

在线(支持浮点型)进制转换https://tool.oschina.net/hexconvert/

在线二进制计算器https://miniwebtool.com/zh-cn/binary-calculator/ 

十进制的无理数是否在某一进制下是有理数?https://www.zhihu.com/question/329019394 


 


 

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

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

相关文章

C++程序设计—类与对象

目录 1、类和对象的概念 2、面向对象程序设计的特点 3、类和对象的区别 4、成员运行算符 &#xff08;1&#xff09;&#xff08;.&#xff09;点运算符 &#xff08;2&#xff09;&#xff08;->&#xff09;箭头运算符 5、类的声明形式 &#xff08;1&#xff09;…

DataBinding 大坑总结(网上我暂时搜不到解决方法)

在使用多Module中使用DataBinding会引发一些奇怪的问题&#xff0c;最近好好的腾出时间来折腾这些奇怪的问题&#xff1a; 1&#xff1a;如果当Module启动DataBinding重启AS启动报错的话&#xff0c;就启用允许多行代码 android { defaultConfig {multiDexEnabled true} } de…

设计模式:UML中的类图(6种关系)

一.UML图介绍 统一建模语言是用来设计软件的可视化建模语言。它的特点是简单、统一、图形化、能表达软件设计中的动态与静态信息。 UML 从目标系统的不同角度出发&#xff0c;定义了用例图、类图、对象图、状态图、活动图、时序图、协作图、构件图、部署图等 9 种图。 二.类图…

apkanalyzer-classpath.jar 中没有.class 文件

apkanalyzer-classpath.jar 中没有.class 文件&#xff0c;apkanalyzer-classpath.jar 包目录下&#xff0c;只有 MANIFEST.MF 文件&#xff0c;如下截图&#xff1a; 而 apkanalyzer.jar 下&#xff0c;有很多 class 文件&#xff0c;其中&#xff0c;BinaryXmlParser.class 就…

P80-MySQL

//启动mysql&#xff0c;我的名字是mysql80 net start mysql80//我的端口号为3307 mysql -hlocalhost -P3307 -uroot -p一、课程介绍 什么是数据库? 数据库&#xff1a;DataBase&#xff08;DB&#xff09;&#xff0c;是存储和管理数据的仓库。

ChatGPT账号被封怎么办?进来看看解决办法

部分内容整理自网络&#xff0c;侵删 最近有很多同学说自己的chatgpt账号被封了。仔细研究了一下大部分被封账号&#xff0c;发现主要有这些个原因&#xff1a; 1&#xff0c;被封的账号可能是用程序批量注册的&#xff0c;也就是一台机器用一个IP在短时间内注册了大量的账号 …

JSON Web Tokens (JWT) — the only explanation you will ever need

本文摘抄自 Ariel Weinberger 博客 JSON Web Tokens (JWT) — the only explanation you will ever need | by Ariel Weinberger | Medium JSON Web Tokens (JWT) — the only explanation you will ever need JSON Web Tokens are changing the world for the better. Acting …

java程序员学前端-Vue2篇

Vue 2 1. Vue 基础 1) 环境准备 安装脚手架 npm install -g vue/cli-g 参数表示全局安装&#xff0c;这样在任意目录都可以使用 vue 脚本创建项目 创建项目 vue ui使用图形向导来创建 vue 项目&#xff0c;如下图&#xff0c;输入项目名 选择手动配置项目 添加 vue rou…

【Vue基础】element快速入门

一、知识点整理 1、安装Element UI组件库&#xff0c;在当前目录下&#xff0c;在命令行执行指令&#xff1a; npm install element -ui2.15.3 如果无法安装&#xff0c;执行以下指令&#xff1a; npm install --legacy-peer-deps element-ui --save 2、引入Element组件库 …

IT项目管理画图题【太原理工大学】

期末复习汇总&#xff0c;点这里&#xff01;https://blog.csdn.net/m0_52861684/category_12095266.html?spm1001.2014.3001.5482 也不知道让画啥&#xff0c;随便猜一下吧。我觉得大概率是让画双代号网络图了&#xff0c;不是网络图我倒立&#xff0c;呃...还是算了吧&#…

氢原子光谱、类氢原子光谱和类氢离子光谱

一、氢原子光谱 &#xff08;1&#xff09;万分之五的差值 在文章“原子的波尔模型、能量量子化、光电效应、光谱实验、量子态、角动量”的第3.3节角动量量子化中&#xff0c;通过公式联立获得得里德伯常数要比经验获得的相差万分之五。 当然这时候有人会想是不是实验测得不准…

设计模式:创建者模式 - 适配器模式

文章目录 1.概述2.结构3.类适配器模式4.对象适配器模式5.应用场景6.JDK源码解析 - Reader 与 InputStream 1.概述 如果去欧洲国家去旅游的话&#xff0c;他们的插座如下图最左边&#xff0c;是欧洲标准。而我们使用的插头如下图最右边的。因此我们的笔记本电脑&#xff0c;手机…

中国人民大学与加拿大女王大学金融硕士——每一份投入和努力其实都有回声

有付出&#xff0c;就会有收获&#xff1b;有努力&#xff0c;就会有回报。当你愿意走出舒适区投入到再学习上&#xff0c;当你为了提升自身而努力后&#xff0c;你终将收获属于你的美好。在金融领域在职读研的我们&#xff0c;待拿到中国人民大学与加拿大女王大学金融硕士毕业…

zabbix配置钉钉机器人告警

1.在钉钉上创建一个钉钉群组 2.在群组中添加一个机器人 3.配置zabbix server调用钉钉接口的代码(使用python) 查看是否有python环境 python --version 找到zabbix 的AlertScriptsPath目录路径 cat /etc/zabbix/zabbix_server.conf|grep AlertScriptsPath 将调用钉钉接口的py…

51单片机(80951系列)引脚功能说明

一 AT89C51引脚图 1.0 中断 1.0.1 中断源 AT89C51一共有5个中断源 &#xff08;1&#xff09;&#xff1a;外部中断0&#xff0c;外部中断请求信号由引脚输入&#xff0c;低电平或下降沿有效&#xff0c;中断请求标志位IE0。 &#xff08;2&#xff09;&#xff1a;外部中断1…

Hive-hive核心面试范围题目整理(数据倾斜、外部表内部表、分区分桶、行转列等)

1 hive的优缺点 优点 SQL减少MR的开发难度使用于实时性不高的数据分析场合优势处理大数据自定义函数 缺点 Hql表达能力优先&#xff1a;迭代式算法&#xff1f; 处理延迟效率较低&#xff0c;小数据的时候&#xff0c;不如传统数据库 2 对hive的了解 优点本质&#xff1…

pymysql详解——通过Python连接Mysql数据库

pymysql详解——通过Python连接Mysql数据库 pymysql是可用于连接mysql数据库&#xff0c;且能够提供mysql与python窗口交互创立通道的工具库。可以通过创建引擎&#xff0c;建立游标直接通过python编程实现mysql数据库操作。在开发和分析可形成线性脚本。是广泛使用的库。 连…

计算机组成原理——第七章输入输出系统(上)

如若来世再相见&#xff0c;半点朱唇尽我尝 文章目录 7.1.1 输入输出系统和IO控制方式7.1.2 外部设备7.2 IO接口7.3.1 程序查询方式流程图 7.1.1 输入输出系统和IO控制方式 i/O接口是一个电子部件&#xff0c;会被集成与主板中&#xff0c;而I/O设备则是你看得见摸得着的那些设…

O(1) 时间复杂度的抽奖算法 - The Alias Method

0 背景 在营销等场景下&#xff0c;有种常见的玩法&#xff0c;即抽奖&#xff0c;不论前端抽奖界面如何炫酷&#xff0c;底层抽奖组件具有一致性。本文不讨论奖池的抽取规则、奖池奖品配置、奖池切换、抽奖机会、奖品扣减和发放、告警和降级等&#xff0c;主要聚焦于抽奖算法…

Nginx之TCP/UDP反向代理

Nginx从1.9.13起开始发布ngx_stream_core_module模块不仅能支持TCP代理及负载均衡,其实也是支持UDP协议的。 1.Nginx下载 wget http://nginx.org/download/nginx-1.24.0.tar.gz 2.Nginx安装 #yum -y install proc* openssl* pcre* # tar -zxvf nginx-1.24.0.tar.gz #cd n…