凡事預則立,不預則廢

在寫下這句話的時候,本身一直覺得應該是這個「欲」。後來本身百度了一下,發現我錯了,本身一直認爲正確的倒是錯誤的,看來最近真的好好反思一下本身的行爲下面是對這句話的解釋:算法

預:預先,指事先做好計劃或準備;立:成就;廢:敗壞。內存

不論作什麼事,事先有準備,就能獲得成功,否則就會失敗。編譯器

爲何要用這句話做爲文章的標題呢?說來很奇怪,我本身也沒有想清楚,反正最近本身過的渾渾噩噩的,感受本身沒有一點長進,因此,忽然之間,就想到了這句話,算是對本身的一個鞭策,好好的去踐行這句話。編譯

今天算來是來到北京近一個月的時間了,感受本身仍是和之前的狀態一個樣,沒有大多的改變。反正如今就是認爲本身的時間浪費不起,卻是真正沒有好好的去珍惜,人就是這樣,有句話怎麼說的:書非借不讀。有些東西是本身的了,就不會好好的去珍惜,可是若是眼睜睜的看着失去的時候,卻後悔莫及。好啦,廢話很少說,之後有機會再扯這些技術以外的問題,今天就好好的總結一下最近學的一些東西吧。基礎

印象最深的是浮點數在內存中的存放(這個記憶很深):百度

今天是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

相關文章
相關標籤/搜索