基础04:移码和浮点数的二进制表示

本文介绍移码以及浮点数的二进制表示。其中浮点数的二进制表示比较难理解,需要一点点数学知识。

标准移码

在一般情况下,移码就是将补码的符号位取反。
-118D = -1110110B (真值)
-118D表示-118的十进制;-1110110B表示二进制。
原码: 11110110
反码: 10001001
补码: 10001010
移码: 00001010

符号位取反的移码,可以等同于偏移值为128的移码,称为标准移码。
即-118D+128D = 10001010B + 10000000B = 00001010B。
移码,可以理解为补码加上偏移值,即将整个取值范围右移一段距离,从移码中可以直接看出真值的大小。
-128[移]: 00000000
-127[移]: 00000001
-126[移]: 00000010
……
+126[移]: 11111110
+127[移]: 11111111

移码的定义

X[移] = 2^(n-1) + X, -2^(n-1) <= X <= 2^(n-1) -1
X为真值,X[移]表示真值X的移码。
举个栗子:
一个字节,n=8。X[移] = 128 + X, -128 <= X <= 127

浮点数二进制表示

浮点数的二进制表示,分为三个部分。
sign,符号位。0表示正,1表示负。
exponent,指数位。采用2^(n-1) - 1的移码。n表示指数位位数。
fraction,小数位。

浮点数的位数如表所示。

—- sign exponent 移码 fraction
32位 1 8 2^(8 - 1) - 1 = 127 23
64位 1 11 2^(11 - 1) - 1 = 1023 52

在深入一点

浮点数的二进制表示用数学表示。
V= (−1)^S ×M × 2^E
(-1)^S表示符号位,当S=0,V为正数;当S=1,V为负数。
M表示有效数字,大于等于1,小于2。
E表示浮点数的指数。

对于M,1<=M<2,M可以写成1.xxxxxx的形式,其中xxxxxx就是小数部分,由0,1组成。IEEE754规定,第一位总是1,可以被舍去,只保存后面的xxxxxx部分。比如保存1.01的时候,只保存01,等到读取的时候,再把第一位的1加上去。

指数E的特殊情况(32位浮点数为例)

浮点数的指数E E的值 M的值 数值
-127 0 全0 ±0
-127 0 M小数点前不加1
0.xxxxxx的形式
128 255 全0 ±无穷
128 255 非0 NaN

  • 浮点数的指数E移码(偏移127)后得到E的值。
  • E全为0。浮点数的指数E等于-127,有效数字M不再加上第一位的1,而是还原为0.xxxxxx的小数。目的是为例表示±0,以及接近于0的很小的数字。
  • E全为1。如果有效数字M全为0,表示±∞(正负取决于符号位s);如果有效数字M不全为0,表示这个数不是一个数(NaN)。

举个两个栗子

9.0的表示方法:
为正数,所以sign=0。
9.0D = 1001.0B = 1.001*2^3B。 注意:小数点不是十进制的小数点,是二进制的小数点。 1.001D ≠ 1.001B。
所以exponent的原值是3,移值是3+127=130D=10000010B。
分数部分,去掉第一位的1,剩余001 在后面补充0,保证23位,即00100000000000000000000。
合并起来,结果为0 10000010 00100000000000000000000。

0.625的表示方法:
为正数,sign=0。
0.625D = 0.101B。其中0.1B = 0.5D = (1/2)^1;0.01B = 0.25D = (1/2)^2;0.001B = 0.125D = (1/2)^3。
0.625D = 0.101B = 1.01 * 2^(-1)。
所以exponent的原值为-1,采用移植是-1+127=126D=01111110B
分数部分,去掉第一位的1,剩余01,在后面补充0,保证23位 01000000000000000000000
合并起来,结果为0 01111110 01000000000000000000000

总结

  1. 移码即补码右移一个偏移量。
  2. 浮点数的二进制表示,还是很头晕的。看不懂,多看几遍。如果还是看不懂,那就看不懂吧。

~~ EOF ~~

时间: 2024-10-26 10:57:40

基础04:移码和浮点数的二进制表示的相关文章

Swift语言指南(三)--语言基础之整数和浮点数

原文:Swift语言指南(三)--语言基础之整数和浮点数   整数   整数指没有小数的整数,如42,-23.整数可以是有符号的(正数,零,负数),也可以是无符号的(正数,零). Swift提供了8,16,32,64位形式的有符号和无符号的整数,这些整数遵循与C语言相似的命名规则.如8位无符号整数的类型为UInt8,32位有符号整数的类型为Int32,和Swift语言的其它类型一样,这些整型命名以大写字母开头.   整数的边界 你可以通过min或max属性为每一个整数类型指定一个最小值或最大值:

浮点数 位数-二进制浮点数乘法的问题

问题描述 二进制浮点数乘法的问题 二进制浮点数做乘法时,第一步是阶码相加,第二部是尾数相乘. 比方说我有两个数(1位符号位,6位阶码,9位尾码) x是0 100010 100101000 y是0 100110 000011000 都是ieee标准 请问x乘以y的IEEE标准是怎么样的?求解题过程 解决方案 javascript 中浮点数乘法的问题浮点数的误差问题浮点数的二进制 解决方案二: http://blog.csdn.net/zcczcw/article/details/7362473ht

Python基础04 运算

原文:Python基础04 运算 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢!   Python的运算符和其他语言类似 (我们暂时只了解这些运算符的基本用法,方便我们展开后面的内容,高级应用暂时不介绍)   数学运算 >>>print 1+9        # 加法 >>>print 1.3-4      # 减法 >>>print 3*5        # 乘法 >>

浮点数的二进制表示

文章转载自:http://www.ruanyifeng.com/blog/2010/06/ieee_floating-point_representation.html     1.      前几天,我在读一本C语言教材,有一道例题: #include <stdio.h> void main(void){ int num=9; /* num是整型变量,设为9 */ float* pFloat=&num; /* pFloat表示num的内存地址,但是设为浮点数 */ printf(&q

基础野:细说浮点数

Brief   本来只打算理解JS中0.1 + 0.2 == 0.30000000000000004的原因,但发现自己对计算机的数字表示和运算十分陌生,于是只好恶补一下.  本篇我们一起来探讨一下基础--浮点数的表示方式和加减乘除运算.   在深入前有两点我们要明确的:   1. 在同等位数的情况下,浮点数可表示的数值范围比整数的大:   2. 浮点数无法精确表示其数值范围内的所有数值,只能精确表示可用科学计数法m*2e表示的数值而已:      (如0.5的科学计数法是2-1,则可被精确存储:

Swift语言指南(三) Swift语言基础:整数和浮点数

整数 整数指没有小数的整数,如42,-23.整数可以是有符号的(正数,零,负数),也可以是无符号的(正数,零). Swift提供了8,16,32,64位形式的有符号和无符号的整数,这些整数遵循与C语言相似的命名规则.如8位无符号整数的类型为UInt8,32位有符号整数的类型为Int32,和Swift语言的其它类型一样,这些整型命名以大写字母开头. 整数的边界 你可以通过min或max属性为每一个整数类型指定一个最小值或最大值: 1 let 最小值 = UInt8.min // 最小值 等于 0,

Java基础-04.总结switch,for,while,do。while跳转语句

你需要的是什么,直接评论留言. 获取更多资源加微信公众号"Java帮帮" (是公众号,不是微信好友哦) 还有"Java帮帮"今日头条号,技术文章与新闻,每日更新,欢迎阅读 学习交流请加Java帮帮交流QQ群553841695 分享是一种美德,分享更快乐! 1:switch语句(掌握) (1)格式:switch(表达式) {case 值1:语句体1;break;case 值2:语句体2;break;...default:语句体n+1;break;} 格式解释说明:sw

Git基础04

临时存储工作区 123 $ git stash # 把当前工作现场(工作区及暂存区的修改)"储藏"起来,以后可恢复现场后继续工作Saved working directory and index state WIP on master: e353f90 Merge branch 'br03'HEAD 现在位于 e353f90 Merge branch 'br03' 12 $ git stash list # 查看所有的stashstash@{0}: WIP on master: e35

Ubuntu 15.04 Gogs(git 版本库) 二进制安装

1.下载 风来了.fox http://gogs.io/docs/installation/install_from_binary.html 下载最新版的 wget https://github.com/gogits/gogs/releases/download/v0.6.1/linux_amd64.zip 2.新建用户 adduser git 密码自己输入 3.解压缩 unzip linux_amd64.zip 移动存放位置,这里存放于/www/目录下 mv gogs /www/gogs 4.