:
當求余運算(remainder operation)符 % 返回一個非零余數時,余數的符號位和左邊操作數的符號位相同。例如
Change.java
關于浮點數的二進制表示~~
(1)二進制浮點數并不能精確表示所有的小數
(2)對計算精度要求比較準確(例如金融計算)時,不要使用float和double,盡量使用int, long,BigDecimal.
(3)推薦閱讀文章:What Every Computer Scientist Should Know About Floating-Point Arithmetic
網上很多地方都有的。另一本牛書 Computer Systems A Programmers's Perspective上也有講浮點數
(4)JLS 3.10.1由規范可知 0.1, .1, 1. 都是合法的浮點數。需要注意的是在java中,浮點數有兩種原生類型float,double,當浮點數的后綴是F或者f時,該浮點數為float類型,沒有后綴或者后綴是D或者d時,該浮點數是double類型的。注意下面的例子
FloatPoint.java
結果:
結果
LongDividion.java
Puzzle 1:
當求余運算(remainder operation)符 % 返回一個非零余數時,余數的符號位和左邊操作數的符號位相同。例如
????????System.out.println((-53)%9);?//?-8
????????System.out.println(53%(-9));?//8
????????System.out.println((-53)%(-9));?//-8
????????System.out.println(53%(-9));?//8
????????System.out.println((-53)%(-9));?//-8
Puzzle 2:

關于浮點數的二進制表示~~
(1)二進制浮點數并不能精確表示所有的小數
(2)對計算精度要求比較準確(例如金融計算)時,不要使用float和double,盡量使用int, long,BigDecimal.
(3)推薦閱讀文章:What Every Computer Scientist Should Know About Floating-Point Arithmetic
網上很多地方都有的。另一本牛書 Computer Systems A Programmers's Perspective上也有講浮點數
(4)JLS 3.10.1由規范可知 0.1, .1, 1. 都是合法的浮點數。需要注意的是在java中,浮點數有兩種原生類型float,double,當浮點數的后綴是F或者f時,該浮點數為float類型,沒有后綴或者后綴是D或者d時,該浮點數是double類型的。注意下面的例子

結果:

Puzzle 3:
需要注意java是如何處理整數溢出的,看下面的例子就一目了然了,別忘了long是 8 bytes,int是 4 bytes的~~
Puzzle 4:
添加long型整數的后綴時要使用L避免用l,同樣不要單獨使用小寫字母l作為變量名,理由是顯而易見的:l和1在大多數字體中太難區分。Puzzle 5:
(1)和十進制數不同,當十六進制、八進制數的最高位是1時,表示它是一個負數(在十進制數中,表示一個負數要顯式使用符號-)
(2)盡量避免混合類型運算,例如本例中的 long型和int型的加法,在java中,一個整數如果沒有后綴L或l,則它是一個int型而不是long型。
JoyOfHex.java
(2)盡量避免混合類型運算,例如本例中的 long型和int型的加法,在java中,一個整數如果沒有后綴L或l,則它是一個int型而不是long型。

Puzzle 6:
Multicast.java
CleverSwap.java
The rule "Sign
extension is performed if the type of the original value is signed;
zero extension if it is a char, regardless of the type to which it is
being converted" describes the sign extension behavior when converting from narrower integral types to wider.

Puzzle 6:
JLS 15.7 Evaluation Order
