在写下这句话的时候,自己一直以为应该是这个“欲”。后来自己百度了一下,发现我错了,自己一直认为正确的却是错误的,看来最近真的好好反思一下自己的行为下面是对这句话的解释:
预:预先,指事先作好计划或准备;立:成就;废:败坏。
不论做什么事,事先有准备,就能得到成功,不然就会失败。
为什么要用这句话作为文章的标题呢?说来很奇怪,我自己也没有想清楚,反正最近自己过的浑浑噩噩的,感觉自己没有一点长进,所以,突然之间,就想到了这句话,算是对自己的一个鞭策,好好的去践行这句话。
今天算来是来到北京近一个月的时间了,感觉自己还是和以前的状态一个样,没有大多的改变。反正现在就是认为自己的时间浪费不起,倒是真正没有好好的去珍惜,人就是这样,有句话怎么说的:书非借不读。有些东西是自己的了,就不会好好的去珍惜,但是如果眼睁睁的看着失去的时候,却后悔莫及。好啦,废话不多说,以后有机会再扯这些技术之外的问题,今天就好好的总结一下最近学的一些东西吧。
印象最深的是浮点数在内存中的存放(这个记忆很深):
今天是3月10号,就拿3.10来说吧。3.10在计算机的内存中是什么样子的呢?就是那个二进制0101什么的。我们知道,float数据类型是占4字节的(其他编译器可能不一样,姑且先不去谈论这个问题),也就是4*8=32位,二进制代码就是:
01000000 01000110 01100110 01100110(0x404666)
哈哈,看到是不是晕了,听我慢慢解释:
第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