博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二进制与十进制整数,浮点数相互转换
阅读量:6920 次
发布时间:2019-06-27

本文共 2261 字,大约阅读时间需要 7 分钟。

整数转化为二进制

1.正整数用源码表示
2.负整数用绝对值的补码表示(将绝对值取反+1)
如-50用50的补码表示
50的源码为 00000000000000000000000000110010
反码则为 11111111111111111111111111001101
补码为反码+1 11111111111111111111111111001110

二进制转化为整数

1.如果符号位为0,表示为正,直接将二进制数据翻译即可
2.如果符号位为1,表示为负,将数据-1取反.或者(取反+1)
如: 11111111111111111111111111001110
-1: 11111111111111111111111111001101
取反: 00000000000000000000000000110010
源码: 11111111111111111111111111001110
取反: 00000000000000000000000000110001
+1: 00000000000000000000000000110010

浮点型转化为二进制

将整数转化为二进制,去掉首位1,小数转化为二进制,整数去1后二进制位数+127转化为二进制,然后根据浮点型正负在最前面加上符号位。
如:-40.125
整数为101000,去掉首位1则为01000,小数为001,则整数位数为5,+127=132(10000100),加上符号位1,则二进制数据为 100 0010 0
整数: 1010 00
去掉首位1: 010 00
加上前八位表示小数点位置: 100 0010 0010 0000 1
加上小数位: 100 0010 0010 0000 1000 0000 0000 0000
加上符号位: 1100 0010 0010 0000 1000 0000 0000 0000

二进制转化为浮点型

去掉首位符号位,取前八位-127然后将剩余的二进制数据小数点后移所得值,首位+1,小数点之前位整数,之后为小数,由符号位判断正负。
如:正数: 0100 0011 0100 0100 0100 0110 1111 1100
去掉符号位: 100 0011 0100 0100 0100 0110 1111 1100
前八位 100 0011 0=134 -124 =7;
整数: 100 0100 首位+1 1100 0100=196
小数: 0100 0110 1111 1100
小数依次乘1/2,1/4,1/8,1/16....=1/20+1/41+1/80+1/160+1/320+1/641......最后得出保留四位小数的话是196.2769
负数:
如: 1100 0010 0010 0010 0111 1110 1001 0000
取掉符号位: 100 0010 0010 0010 0111 1110 1001 0000
取前八位 100 0010 0 =132 -127=5
整数部分: 010 00 首位+1 =1010 00 =40
小数部分 10 0111 1110 1001 0000 =1/2+1/16+1/32+1/64+1/128+1/256+....=0.621浮点数为 -40.621

十进制小数→→→→→二进制小数 方法:“乘2取整”

对十进制小数乘2得到的整数部分和小数部分,整数部分既是相应的二进制数码,再用2乘小数部分(之前乘后得到新的小数部分),又得到整数和小数部分.

如此不断重复,直到小数部分为0或达到精度要求为止.第一次所得到为最高位,最后一次得到为最低位

如:0.25的二进制

0.25*2=0.5 取整是0

0.5*2=1.0 取整是1

即0.25的二进制为 0.01 ( 第一次所得到为最高位,最后一次得到为最低位)

0.8125的二进制

0.8125*2=1.625 取整是1

0.625*2=1.25 取整是1

0.25*2=0.5 取整是0

0.5*2=1.0 取整是1

即0.8125的二进制是0.1101(第一次所得到为最高位,最后一次得到为最低位)

十进制小数→→→→→八进制小数 方法:“乘8取整”

0.71875)10 =(0.56)8

0.71875*8=5.75 取整5

0.75*8=6.0 取整6

即0.56

十进制小数→→→→→十六进制小数方法:“乘16取整”例如:

(0.142578125)10=(0.248)16

0.142578125*16=2.28125 取整2

0.28125*16=4.5 取整4

0.5*16=8.0 取整8

即0.248

非十进制数之间的转换

(1)二进制数与八进制数之间的转换

转换方法是:以小数点为界,分别向左右每三位二进制数合成一位八进制数,或每一位八进制数展成三位二进制数,不足三位者补0。例如:

(423。45)8=(100 010 011.100 101)2

(1001001.1101)2=(001 001 001.110 100)2=(111.64)8

(2)二进制与十六进制转换

转换方法:以小数点为界,分别向左右每四位二进制合成一位十六进制数,或每一位十六进制数展成四位二进制数,不足四位者补0。例如:

(ABCD。EF)16=(1010 1011 1100 1101.1110 1111)2

转载于:https://blog.51cto.com/12512821/2363818

你可能感兴趣的文章
webpack打包的原理的优势?
查看>>
java对于Redis中jedis的操作
查看>>
移动 H5 首屏秒开优化方案探讨
查看>>
redis的数据持久化方案
查看>>
2015年度精品 最新力作32位和64位xp,win7,win8,win10系统下载(电脑城专用版)
查看>>
hdu Wooden Sticks
查看>>
图像分类学习笔记
查看>>
Python学习笔记(二)
查看>>
语音信号处理之(一)动态时间规整(DTW)
查看>>
Python3 operator模块关联代替Python2 cmp() 函数
查看>>
温故知新系列(一)冒泡排序
查看>>
Web服务之LNMMP架构及动静分离实现
查看>>
java作业6
查看>>
从基础到分析,聊一聊企业报表平台的建设规划!
查看>>
java中的AIO
查看>>
混合云已到来,企业用户们你们准备好了吗?
查看>>
【超详细教程】使用Windows Live Writer 2012和Office Word 2013 发布文章到博客园全面总结...
查看>>
HomeAccess Ha910设置自动拨号
查看>>
备忘录方法与动态规划比较
查看>>
BZOJ3157: 国王奇遇记 & 3516: 国王奇遇记加强版
查看>>