Jafe Lee

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  49 随笔 :: 0 文章 :: 24 评论 :: 0 Trackbacks
Puzzle 1:

当求余运算(remainder operation)符 % 返回一个非零余数时,余数的符号位和左边操作数的符号位相同。例如
        System.out.println((-53)%9); // -8
        System.out.println(53%(-9)); //8
        System.out.println((-53)%(-9)); //-8

Puzzle 2:

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

结果:
结果

Puzzle 3:
需要注意java是如何处理整数溢出的,看下面的例子就一目了然了,别忘了long是 8 bytes,int是 4 bytes的~~
LongDividion.java

Puzzle 4:
添加long型整数的后缀时要使用L避免用l,同样不要单独使用小写字母l作为变量名,理由是显而易见的:l和1在大多数字体中太难区分。
Puzzle 5:
(1)和十进制数不同,当十六进制、八进制数的最高位是1时,表示它是一个负数(在十进制数中,表示一个负数要显式使用符号-)
(2)尽量避免混合类型运算,例如本例中的 long型和int型的加法,在java中,一个整数如果没有后缀L或l,则它是一个int型而不是long型。
JoyOfHex.java
Puzzle 6:
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.

Multicast.java
Puzzle 6:
JLS 15.7 Evaluation Order
CleverSwap.java

posted on 2007-08-11 13:46 Jafe Lee 阅读(302) 评论(0)  编辑  收藏 所属分类: Book Notes-- Java Puzzlers

只有注册用户登录后才能发表评论。


网站导航: