二进制与浮点数

 我来答
大沈他次苹0B
2022-07-04 · TA获得超过7332个赞
知道大有可为答主
回答量:3059
采纳率:100%
帮助的人:178万
展开全部

补数可以简单对应到十进制中的相反数,如 10与-10互为相反数;

而在二进制中就是用正数来表示的负数,可能这话不太好理解

在二进制表示负数值时,一般会把最高位作为符号来使用,0:表示正数,1:表示负数

看个例子

计算机中减法的实现其实就是通过补数的方式 实现的,
比如1-1 = 0 => 1 + (-1) = 0 ,计算时全部转成二进制计算

正数的移位基本和十进制是一样的,左移一位是1x10,计算机就是1x2,所以左移就是2的n次方;

左移低位都是补0;

负数的左移,如 -14 << 2 = -56

正数十进制右移一位是1x0.1,计算机就是1x0.5(2的-1次方),所以右移就是2的n次方分之一;

右移正数高位都是补0;

当负数时,若该数值是用补数表示的负数值,则右移后的所有高位补1

负数的右移,如 -14 >> 2 = -4

在计算机中表示小数是采用浮点数表示法,所以像1011.0011这样的小数形式,完全都是在纸上运算的结果。

浮点数是指用符号、尾数、基数和指数这四部分来表示的小数.其规定小数点前面的值固定为1的正则表达式.

IEEE规定的浮点数

十进制数0.5,用浮点数表示

二进制数0.11,用浮点数表示

尾数部分:用的是将小数点前面的值固定为1的正则表达式;

指数部分:用的是EXCESS系统表现法,是指根据指数部分的最大值的一半,得出中间值,记作0,使得负数不需要用符号来表示(不知道为什么这样设计);

计算机中计算小数的时候其实都是按照下面存储计算的,并非采用IEEE规定的浮点数表示法,所以我认为EXCESS系统表现方式就是为了方便与浮点数表示法做互相转化的.

程序中常用的浮点数double与float内部构造(IEEE-754规定)

从IEEE的规定的构造中得出,

双精度的有效尾数是52位,另加1位(该位即小数点前的1,但是实际内存中不会存储,这是约定),即53位,2^53,对应到十进制的 10^15 ~ 10^16,所以在十进制中有效位是15位

而单精度的有效尾数是23位,另加1位,即24位,2 24,对应到十进制的10 7 ~ 10^8,所以十进制中有效位是7位

这里再举一个例子
再按上面所说的,再计算下 float a = 6.7 在计算机内存中是如何存储的

即10公里差1厘米,这样的误差可以忽略不计

就是把小数x10、x100先扩大计算,再缩小;

可以简单看看Java中BigDecimal的实现
见下图

从图中看到BigDecimal的就是通过扩大小数的倍数来计算的;

https://en.wikipedia.org/wiki/Binary-coded_decimal

总结记录结束!!!

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式