凡事预则立,不预则废

在写下这句话的时候,本身一直觉得应该是这个“欲”。后来本身百度了一下,发现我错了,本身一直认为正确的倒是错误的,看来最近真的好好反思一下本身的行为下面是对这句话的解释:算法

预:预先,指事先做好计划或准备;立:成就;废:败坏。内存

不论作什么事,事先有准备,就能获得成功,否则就会失败。编译器

为何要用这句话做为文章的标题呢?说来很奇怪,我本身也没有想清楚,反正最近本身过的浑浑噩噩的,感受本身没有一点长进,因此,忽然之间,就想到了这句话,算是对本身的一个鞭策,好好的去践行这句话。编译

今天算来是来到北京近一个月的时间了,感受本身仍是和之前的状态一个样,没有大多的改变。反正如今就是认为本身的时间浪费不起,却是真正没有好好的去珍惜,人就是这样,有句话怎么说的:书非借不读。有些东西是本身的了,就不会好好的去珍惜,可是若是眼睁睁的看着失去的时候,却后悔莫及。好啦,废话很少说,之后有机会再扯这些技术以外的问题,今天就好好的总结一下最近学的一些东西吧。基础

印象最深的是浮点数在内存中的存放(这个记忆很深):百度

今天是3月10号,就拿3.10来讲吧。3.10在计算机的内存中是什么样子的呢?就是那个二进制0101什么的。咱们知道,float数据类型是占4字节的(其余编译器可能不同,姑且先不去谈论这个问题),也就是4*8=32位,二进制代码就是:数据类型

01000000 01000110 01100110 01100110(0x404666)二进制

哈哈,看到是否是晕了,听我慢慢解释:float

第1位:表示浮点数的正负,1为负数,0为正数,咱们输入的是3.10,因此就是0技术

第2~9位:转换为十进制,再减去127就是指数的大小,至于为何要减去127,由于这是老鳖的屁股(IEEE的龟腚)。首先,咱们要知道,浮点数在由2部分组成,底数(大于0小于1)和指数。也就是0.310*e^1,而后128-127=1

第10~32位:底数部分。只有23位,其实这里省略了整数部分1,完整的为1.1000110 0110011001100110,这里指数E=1,也就变成了11.0001100110011001100110,换算为10进制,整数部分我一眼就看出来是3,可是小数部分怎么算呢?(基础很差为嘛还要搞这么底层,自找苦吃)

小数部分的换算:1*(2^-4)+1*(2^-5)+1*(2^-8)+1*(2^-9)……,为啥是这样子呢?0.0625+0.03125+… …+……=0.1(大约)

到这里,我相信你会想到一句话,浮点型数据在运算中会有精度的损失,正是由于它在内存中这样独特的存储方式,因此才会致使这个问题。

那么有什么办法躲避这个问题呢?呵呵,这就不是本文的探讨范围了,网上有具体的算法,你们能够看看,反正我是没有细究下去,毕竟如今还用不着。

上边说的是怎么把一个二进制转换为一个十进制,那我如今好比给个-17.625,二进制怎么手动计算出来呢?

首先,这是个负数,第1位是1

其次,写成指数形式是0.17625*e^2,指数是2,2+127=129,二进制位1000 0001

最后,底数部分。17.625的二进制为:

整数部分:10001

小数部分:0.625*2=1.250余1

               0.250*2=0.5    余0

               0.5*2=1           余0

合并起来为:10001.100

不行,思路不清晰,第一次写,明天整理下,sorry

相关文章
相关标签/搜索