-
十进制数转换为二进制数以及浮点数存储方法
2019-03-22 15:45:26一、十进制数转换为二进制数 十进制数转换为二进制数时,由于整数和小数的转换方法不同,所以先将十进制数的整数部分和小数部分分别转换后,再加以合并。 1. 十进制整数转换为二进制整数 十进制整数转换为二进制...一、十进制数转换为二进制数
十进制数转换为二进制数时,由于整数和小数的转换方法不同,所以先将十进制数的整数部分和小数部分分别转换后,再加以合并。
1. 十进制整数转换为二进制整数
十进制整数转换为二进制整数采用"除2取余,逆序排列"法。具体做法是:用2去除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为零时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。
【例1 】 把 (173)10 转换为二进制数。
2.十进制小数转换为二进制小数
十进制小数转换成二进制小数采用"乘2取整,顺序排列"法。具体做法是:用2乘十进制小数,可以得到积,将积的整数部分取出,再用2乘余下的小数 部分,又得到一个积,再将积的整数部分取出,如此进行,直到积中的小数部分为零,或者达到所要求的精度为止。
然后把取出的整数部分按顺序排列起来,先取的整数作为二进制小数的高位有效位,后取的整数作为低位有效位。
【例2】把(0.8125)10转换为二进制小数。
【例3】(173.8125)10=( )2
解: 由【例1】得(173)10=(10101101)2
由【例2】得(0.8125)10=(0.1101)2
把整数部分和小数部分合并得: (173.8125)10=(10101101.1101)2
更具体二进制和十进制之间的转换参考:https://jingyan.baidu.com/article/597a0643614568312b5243c0.html二、浮点类型数据的存储
对于浮点类型的数据采用单精度类型(float)和双精度类型(double)来存储,float数据占用32bit,double数据占用64bit,不论是float还是double在存储方式上都是遵从IEEE的规范的,float遵从的是IEEE R32.24 ,而double 遵从的是R64.53。无论是单精度还是双精度在存储中都分为三个部分:
符号位(Sign) : 0代表正,1代表为负
指数位(Exponent):用于存储科学计数法中的指数数据,并且采用移位存储
尾数部分(Mantissa):尾数部分
其中float类型数据的存储方式如下图所示:
而double类型数据的存储方式为:
R32.24和R64.53的存储方式都是用科学计数法来存储数据的,比如8.25用十进制的科学计数法表示为:8.2510º,而120.5可以表示为:1.20510²。而计算机根本不认识十进制的数据,他只认识0,1。所以在计算机存储中,首先要将上面的数更改为二进制的科学计数法表示。8.25用二进制表示可表示为1000.01。120.5用二进制表示为:1111000.1。用二进制的科学计数法表示1000.01可以表示为1.0000110³,1111000.1可以表示为1.111000110^6。第一位都是1,所以可以将小数点前面的1省略,所以23bit的尾数部分,可以表示的精度却变成了24bit,道理就是在这里,那24bit能精确到小数点后几位呢,我们知道9的二进制表示为1001,所以4bit能精确十进制中的1位小数点,24bit就能使float能精确到小数点后6位,而对于指数部分,因为指数可正可负,8位的指数位能表示的指数范围就应该为:-127-128了,所以指数部分的存储采用移位存储,存储的数据为元数据+127,下面就看看8.25和120.5在内存中真正的存储方式。
值得注意的一个问题是:书上说之所以要将指数加上 127 来得到阶码,是为了简化浮点数的比较运算,这一点我没有体会出来。但是通过 127 这个偏移量 (移码),可以区分出指数的正负。阶码为 127 时表示指数为 0;阶码小于 127 时表示负指数;阶码大于 127 时表示正指数。
首先看下8.25,用二进制的科学计数法表示为:1.00001*10³
按照上面的存储方式,符号位为:0,表示为正,指数位为:3+127=130 ,位数部分为,故8.25的存储方式如下图所示:
而单精度浮点数120.5的存储方式如下图所示:
具体浮点型数据存储方式参考:https://wenku.baidu.com/view/905828797fd5360cbb1adb07.html -
Perl十进制数字转换为二进制字符
2018-10-16 14:19:03以下函数可以将十进制数字转换为二进制字符 #十进制转换成二进制(8位二进制) #参数说明:$dec:十进制数,$str二进制字符 sub dec_to_bin($$){ my $dec = shift; my $str = shift; if($dec < 2){ $str...项目需要,随笔记录一下。以下函数可以将十进制数字转换为二进制字符
#十进制转换成二进制(8位二进制) #参数说明:$dec:十进制数,$str二进制字符 sub dec_to_bin($$){ my $dec = shift; my $str = shift; if($dec < 2){ $str = $dec.$str; if(length($str) < 8){ my $len = 8-length($str); for (my $i = 0; $i < $len; $i++) { $str = '0'.$str; } } return $str; } my $mod = $dec % 2; $dec = ($dec - $mod) / 2; $str = $mod.$str; return &dec_to_bin($dec,$str); } #函数调用 my $str = &dec_to_bin(20); #输出00010100
-
十进制数转换为二进制数
2012-08-30 22:07:49十进制数转换为二进制数时,由于整数和小数的转换方法不同,所以先将十进制数的整数部分和小数部分分别转换后,再加以合并。 1. 十进制整数转换为二进制整数 十进制整数转换为二进制整数采用"除2取余,逆序排列...十进制数转换为二进制数时,由于整数和小数的转换方法不同,所以先将十进制数的整数部分和小数部分分别转换后,再加以合并。
1. 十进制整数转换为二进制整数
十进制整数转换为二进制整数采用"除2取余,逆序排列"法。具体做法是:用2去除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为0时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。 十进制整数转二进制 如:255=(11111111)B 255/2=127=====余1 127/2=63======余1 63/2=31=======余1 31/2=15=======余1 15/2=7========余1 7/2=3=========余1 3/2=1=========余1 1/2=0=========余1 789=1100010101 789/2=394.5 =1 第10位 394/2=197 =0 第9位 197/2=98.5 =1 第8位 98/2=49 =0 第7位 49/2=24.5 =1 第6位 24/2=12 =0 第5位 12/2=6 =0 第4位 6/2=3 =0 第3位 3/2=1.5 =1 第2位 1/2=0.5 =1 第1位2.十进制小数转换为二进制小数
十进制小数转换成二进制小数采用"乘2取整,顺序排列"法。具体做法是:用2乘十进制小数,可以得到积,将积的整数部分取出,再用2乘余下的小数部分,又得到一个积,再将积的整数部分取出,如此进行,直到积中的小数部分为零,此时0或1为二进制的最后一位。或者达到所要求的精度为止。 然后把取出的整数部分按顺序排列起来,先取的整数作为二进制小数的高位有效位,后取的整数作为低位有效位。 十进制小数转二进制 如:0.625=(0.101)B 0.625*2=1.25======取出整数部分1 0.25*2=0.5========取出整数部分0 0.5*2=1==========取出整数部分1 再如:0.7=(0.1 0110 0110...)B 0.7*2=1.4========取出整数部分1 0.4*2=0.8========取出整数部分0 0.8*2=1.6========取出整数部分1 0.6*2=1.2========取出整数部分1 0.2*2=0.4========取出整数部分0 0.4*2=0.8========取出整数部分0 0.8*2=1.6========取出整数部分1 0.6*2=1.2========取出整数部分1 0.2*2=0.4========取出整数部分0 -
#Python# 十进制数转换为二进制数(包含小数)
2020-05-02 20:26:12#Python# 十进制数转换为二进制数(包含小数)问题描述问题分析代码 问题描述 编写程序,输入十进制小数(只考虑正数),把它转换为以字符串形式存储的二进制小数,输出该二进制小数字符串。对于转换得到的二进制...问题描述
编写程序,输入十进制小数(只考虑正数),把它转换为以字符串形式存储的二进制小数,输出该二进制小数字符串。对于转换得到的二进制小数,小数点后最多保留10位。小数点后不足10位,则输出这些位,尾部不补0;小数点后超出10位,则直接舍弃超出部分。十进制转换成二进制时,需要将整数和小数部分分开。整数部分的策略是除2取余,而小数部分的策略是乘2取整,分别转换后再将整数和小数部分合起来。不清楚的同学自己上网查阅相关资料。
本题需要编写2个函数,分别对应整数和小数部分的转换过程。
问题分析
拆分问题为:
(1)整数部分转换为二进制;
(2)小数部分转化为二进制;
(3)将整数部分与小数部分组合并输出。
问题(1):构造函数conInt(),将整数部分除2取余存入列表中,后逆序列表再合并为字符串返回;
问题(2):构造函数conFra(),将小数部分乘2取整存入列表篇中,后合并为字符串返回。需注意的是遇到无限乘2取整的十进制小数时,应舍0入1。
问题(3):使用print(f"{a},{b}")的句式,将字符串组合输出代码
def conInt(n): s=[] while(n): s.append(str(n%2)) n=n//2 s.reverse() return "".join(s) def conFra(n): x=[] s=[] while(n): n=n*2 x.append(str(int(n))) n=n-int(n) for i in range(0,10): s.append(x[i]) return "".join(s) def main(): n=eval(input()) a=int(n) b=n-a print(f"{conInt(a)}.{conFra(b)}") main()
-
利用for循环将十进制数字转换为二进制并输出
2017-07-13 16:48:32简单的利用for循环,将一个十进制数字转换为二进制并输出 ... * 将任意一个十进制数转换为二进制数并输出 */ int num=35;//设置任意一个数 int blcl=8;//二进制位数 int [] blc=new int [blcl];// -
Java 实现十进制数转换为二进制
2020-03-25 03:00:55简单实现 public static String toBinary(int n) { StringBuilder sb = new StringBuilder(); for (int i = 31; i >... // 将最高位的数移至最低位(移31位), 再 & 1 操作,由于1在内存... -
进制转换 把二进制数转换成十进制数
2010-04-07 20:35:29描述: 把二进制数转换成十进制数。 输入: 输入是一个8位的二进制数。 输出: 把输入的数转换为十进制数输出。 输入样例: 10000001 输出样例: 129 -
C++学习记录:将十进制数转换为二进制数(补码形式)
2021-03-03 19:26:22C++学习记录:将十进制数转换为二进制数(补码形式) 0、以下操作前提:不动符号位 基本运算: 1、正数的补码 等于 原码; 2、负数的补码 等于 原码取反,末位再加一; 推论: 3、补码的补码 等于 原码; 4、反码的... -
bash 将二进制转换为十进制_进制转换 二进制转十进制
2021-01-03 23:00:31我们来看看下面的动图(白色为二进制,红色为十进制),你找到规律了吗? 我们这节课学习一下二进制转换十进制的方法。方法如下:将二进制数从小数点开始,往左从0开始对数值进行正序编号,往右从-1开始对数值进行编号... -
整数进制转换——输入十进制整数和欲转换的进制数r,将十进制数转换为r进制数的Python程序
2020-11-22 10:45:28十进制浮点数转化为二进制的Python代码 十进制整数转化为r进制数 程序功能为:输入十进制整数和欲转换的进制数r,将十进制转换为r进制。 编程思想为:调用函数DToR,逐位求模。若该位为大于9的数,则以字母代表... -
递归法将十进制数字转换为其他进制数字
2021-01-18 18:12:23十进制转换为二进制数字为例子 十进制 二进制 1 1 2 10 3 1%1 10 1010 二.以十进制位获得每一位数字为例子 1 -----> 1%10=1 11 -----> 11%10=1 + (11/10 )%10=1 123-----> 123%10=3 + ( ... -
【九度】三十位大数转换为二进制
2017-01-12 15:28:36将一个长度最多为30位数字的十进制非负整数转换为二进制数输出。 输入: 多组数据,每行为一个长度不超过30位的十进制非负整数。 (注意是10进制数字的个数可能有30个,而非30bits的整数) 输出: 每行输出... -
位运算实现十进制转换为二进制
2021-01-21 18:13:54#include //将十进制数转化为二进制数,位运算的取位操作 using namespace std; int main() { unsigned short i; cout << “请输入一个小于65536的正整数” << endl>> i; for(int j=15; j ... -
二进制数转换为十进制数
2010-12-08 15:10:00二 ----> 十 二进制数转换为十进制数 二进制数第0位的权值是2的0次方,第1位的权值是2的1次方…… 所以,设有一个二进制数:0110 0100,转换为10进制为: 下面是竖式: 0110... -
用位运算将十进制转为二进制python_用位运算实现十进制转换为二进制
2020-12-17 06:11:06代码如下:1 #include //将十进制数转化为二进制数,位运算的取位操作2 using namespacestd;3 intmain()4 {5 unsigned shorti;6 cout << "请输入一个小于65536的正整数" <>i;8 for(int j=15; j >= 0;... -
对于一个十进制数A,将A转换为二进制数,然后按位逆序排列,再转换为十进制数(Java)
2020-03-09 11:26:08* 对于一个十进制数A,将A转换为二进制数,然后按位逆序排列,再转换为十进制数 * B就是A的二进制逆序数 * 输入一个1000位以内的十进制整数 * */ import java.math.BigInteger; import java.util.Scanner; ... -
二进制转换为十进制java_10、进制转换:二进制、八进制、十六进制、十进制之间的转换...
2020-12-05 22:36:14将二进制、八进制、十六进制转换为十进制二进制、八进制和十六进制向十进制转换都非常容易,就是“按权相加”。所谓“权”,也即“位权”。假设当前数字是N进制,那么:对于整数部分,从右往左看,第 i 位的位权等于... -
编程将键盘输入的4位十进制数转换成二进制,并以十六进制形式在屏幕上显示。如果 输入的不是十进制数字时...
2021-01-08 12:15:401.编程将键盘输入的4位十进制数转换成二进制,并以十六进制形式在屏幕上显示。...在各个子程序之间,用BX寄存器来完成参数传递:在过程DECIN中取得的输入数据转换为二进制后保存在BX寄存器中,而过程HEXDISP将B -
十进制进制法_十进制转换成二进制及二进制转换成十进制是如何转换的?
2021-01-15 08:26:30把给定的十进制数29除以2,商为14,所得的余数1是二进制数的最低位的数码,再将14除以2,商为7,余数为0。再将7除以2,商为3,余数为1,再将3除以2,商为1,余数为1,再将1除以2,商为0,余数为1是二进制数的最高位... -
十进制数转换为二进制时1的个数
2016-09-16 18:02:29function numberOf1(n){ var c; for (c =0; n; ++c) { n &= (n -1) ; // 清除最低位的1 } return c; } -
将一个长度最多为30位数字的十进制非负整数转换为二进制数输出 c语言 大数处理
2021-02-07 18:02:36将一个长度最多为30位数字的十进制非负整数转换为二进制数输出 输入描述: 多组数据,每行为一个长度不超过30位的十进制非负整数。 (注意是10进制数字的个数可能有30个,而非30bits的整数) 输出描述: 每行输出对应... -
matlab将txt文件中的有符号二进制数转换为十进制数
2020-05-03 15:47:41本文实现的是将十二位的有符号的二进制数转换为十进制数: 由于在数字在显示中,如果高位为0会在显示中被省去,所以,这里无法检测到每个数的位数都为12位,也就是无法全部检测到12位的符号位。 比如: 000011110000... -
将一个长度最多为30位数字的十进制非负整数转换为二进制数输出。
2020-10-03 13:12:31将一个长度最多为30位数字的十进制非负整数转换为二进制数输出。 思想:从大往小进位 本题思考点在于从大到小进位。算法的核心三行相当于执行了我们平常的除法。 #include <algorithm> #include <cstdio>... -
C++实现读入二进制数并转换为十进制输出
2020-12-31 17:15:11已知一个只包含0和1的二进制数,长度不大于10,将其转换为十进制并输出。 输入描述 输入一个二进制整数n,其长度不大于10 输出描述 输出转换后的十进制数,占一行 样例输入 110 样例输出 6 solution: 很多学过C... -
十进制小数转换为二进制
2018-04-18 11:05:35十进制小数转换为二进制采用乘2取整的方法1.用2乘以十进制小数,将得到的乘积整数部分取出2.再用2乘以余下的小数,再将乘积的整数部分取出3.反复进行直到乘积的小数部分为0或者满足精度要求为止4.把最先得到的整数... -
二进制转换为十进制(Verilog代码)
2019-04-08 11:01:50适用于将二进制数转换为十进制,A为十进制,B为二进制。{A,B}每次左移一位,判断A的每四位是否>4,若大于四则+3,否则保持不变;B为多少位二进制数则左移多少次。最终A是B转换成十进制的数。代码为32位二进制数转换... -
-32767转化为二进制_十进制小数如何转换为二进制
2020-12-28 09:54:15十进制:由 0~9 十个数字组成二进制:由 0和1 两个数字组成1、整数转换十进制转二进制的原理:十进制的数除以2,直到商为0,最后反向取余数。比如下图中的例子,十进制的13转为二进制表示,则为1101。十进制转二进制... -
十进制转换成二进制以 二进制转换成 8进制和16进制
2016-08-13 23:06:00十进制转换成二进制 举例:752(十进制数) --》 转换成 二进制数 从下往上 读取数据 二... 表示的十位数 为 7,也是 8进制 每位上 最大的数字 011110000 转换为 8进制 ,从右到左 ,三位 隔开 ... -
进制转换:二进制、八进制、十六进制、十进制之间的转换
2018-09-13 21:16:56将二进制、八进制、十六进制转换为十进制 二进制、八进制和十六进制向十进制转换都非常容易,就是“按权相加”。所谓“权”,也即“位权”。 假设当前数字是N进制,那么: 对于整数部分,从右往左看,第i位的位权...