java puzzlers英文版_java puzzlers [更新至14.04.03]

解惑1:奇偶性

奇偶性判断可用&运算代替取余运算:

偶数:(i & 1) == 0;

奇数:(i & 1) != 0;

解惑2:找零时刻

System.out.println(2.0 - 1.1); //输出0.8999999999999999

二进制浮点不适合货币计算,它不能将0.1或10的其他任何负次幂精确表示为一个有限长度的二进制小数,只能表示为最靠近它的临近值。1.1不能被精确表示为一个double,因此2.0减去1.1的临近值就得到输出结果。

解决方法可以将小数化为相应的整数进行计算,或者使用Java在java.math包中提供的API类BigDecimal,且必须使用参数类型为String的构造函数,上述代码可表示为:

System.out.println(new BigDecimal("2.0").subtract(new BigDecimal("1.1"))); //输出0.9

解惑3:长整数

long a = 24 * 60 * 60 * 1000 * 1000;long b = 24L * 60 * 60 * 1000 * 1000;

System.out.println(a);//输出500654080

System.out.println(b);           //输出86400000000

System.out.println(Integer.MAX_VALUE);  //输出2147483647

System.out.println(Long.MAX_VALUE);    //输出9223372036854775807

当操作数字很大时,要提防溢出。如上述代码,a虽然是long类型,但其赋值号右边的运算均以int运算来执行,在运算完成之后才提升为long型,而计算过程中已溢出(整型最大值为2^31-1

= 2147483647)。而b的第一个因子为long型,可使得每一个乘积的第一个因子均为long型,因此可以强制表达式所有后续计算都用long运算,且计算结果不会溢出(长整型最大值为2^63-1

= 9223372036854775807)。

解惑4:初级问题

注意区分 54321 和 5432l 。后者为long型值为5432,为了区分,在long类型字面值常量中,建议用大写的L表示。

原文:http://www.cnblogs.com/honghuzidelaoren/p/3642140.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值