《java解惑》筆記一

2021-08-17 07:28:21 字數 2465 閱讀 6599

isodd方法用來確定傳來的引數是否是奇數,由於當傳入負數i時,i%2的值為-1或0,負奇數也不能判斷正確。由於偶數是對2取余為0,所以應該將i%2==1修改為i%2!=0。修改後,奇數對2取餘不是正1或負1都能滿足。

public

static

boolean

isodd(int i)

public

static

void

main(string args)

//控制台輸出:

雙精度在記憶體表示(16進製制):4000000000000000

雙精度在記憶體表示(16進製制):3ff199999999999a

-1.10結果雙精度在記憶體表示(16進製制):3feccccccccccccc

雙精度在記憶體表示(16進製制):3feccccccccccccd

chapterutils是乙個檢視數字在記憶體儲存的工具類

public

class chapterutil

public

static string getfromint(int i)

public

static string getfromlong(long i)

public

static string getiee754fromdouble(double i)

}

2.0-1.1 涉及浮點數加減法

在我的一篇部落格中介紹了float在記憶體儲存方式,其實double也差不多

double 符號位1位,指數字11位,尾數52位

2.0是正數,符號位0,2的二進位制表示為1∗

211 ∗2

1,指數是1,所以指數字為1+1023=

1024(10

)=400(16)

1024(10

)=

400(16)

,所以符號位包括指數字就是

400(16)

400(16)

,其餘由於指數字不全為0,所以是規格的,尾數省去1,都是0.

1.1是正數,符號位0, 1.1的二進位制表示為

1.000110011⋯

以0011迴圈

∗20 1.000110011⋯⏟

以0011迴圈

∗2

0,由於double尾數只能存52位,所以尾數就是1⋯

11個9

a(16)

1 ⋯⏟

11個9a

(16

),最後一位為a,是因為最後乙個9後面還是1,所以進一位由9變為a。指數為0,指數字就是0+1023=

1023(10

)=3f

f(16)

1023(10

)=3f

f(16)

.浮點數的減法,先對階,1.1的指數也就是階碼比2少1,尾數向右移一位,隱藏的那一位也右移,得到8⋯

11個c

d(16)

8 ⋯⏟

11個cd

(16

),然後計算尾數的減法,得到7⋯

12個3

7 ⋯⏟

12個

3,進行規範化操作,因為不滿足規範化,向左移2位,最後補0,階碼減2,最後尾數為⋯

13個

c ⋯⏟13

個c

,指數字為-1,所以指數字和符號位一起就是3f

e(16)

3 fe

(16

).最終結果為3f

e⋯

13個c

3 fe

⋯⏟13個

c.

public

static

void

main(string args)

//控制台輸出:

//一天中微秒數:溢位後的數500654080

//一天中微秒數:正確的值86400000000

//正確的long在記憶體儲存為:141dd76000

//溢位後的值在記憶體儲存為:1dd76000

//86400000

//5

由於int與int相乘只會儲存在int裡,由於最終的結果已經超出int的範圍,即使儲存在long裡,也只是溢位後的值。因為由記憶體儲存可見,捨去了8位,14是十六進製制的。

public

static

void

main(string args)

//控制台列印:

//17777

由於5432l中l很像1,特別容易看錯,所以一定要用大寫的l來表示乙個長整數。

《java解惑》筆記三

public static void main string args 控制台列印 1e240 7616 7616類似 復合賦值操作符,e1 op e2 等價於 e1 t e1 op e2 其中t是e1的型別。上面的例子中,當進行加法時,會將運算元提公升為int,得到123456,然後會轉化為sho...

《java解惑》筆記八

要實現i i為true public static void main string args 控制台輸出 true 7ff8000000000000 7ff8000000000000double.nan表示乙個非數字 not a number 在記憶體儲存為0x7ff8000000000000,維...

Java解惑筆記《不斷更新》

1 判斷奇數isodd return i 1 0 2 new bigdecimal 2.00 subtract new bigdecimal 1.10 避免用new bigdecimal 1 因為精確到0.1000000555111等非常精確的數字 還有一種妥協的解決辦法 system.out.pr...