:
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
<!---->import java.math.BigDecimal;
public class Change
{
public static void main(String args[])
{
System.out.println(2.00 - 1.10);//0.8999999999999999
System.out.println(new BigDecimal("2.00").subtract(new BigDecimal("1.10")));//0.90
System.out.printf("%.2f%n", 2.00-1.10);//0.90
}
}
关于浮点数的二进制表示~~
(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
<!---->public class FloatPoint
{
public static void main(String [] args)
{
double x = .12345;
double y = 1234.;
double z = 1.123432343;
//float a = 0.1; -- 可能损失精度
float b = 0.1f;
float c = .1234f;
//float d = .123; --可能损失精度
System.out.println("x = " + x);
System.out.println("y = " + y);
System.out.println("z = " + z);
System.out.println("b = " + b);
System.out.println("c = " + c);
}
} 结果:
结果
<!---->x = 0.12345
y = 1234.0
z = 1.123432343
b = 0.1
c = 0.1234 Puzzle 3:
需要注意java是如何处理整数溢出的,看下面的例子就一目了然了,别忘了long是 8 bytes,int是 4 bytes的~~
LongDividion.java
<!---->public class LongDivision
{
public static void main(String[] args)
{
final long MICROS_PER_DAY = 24 * 60 * 60 * 1000 * 1000L;
final long MILLIS_PER_DAY = 24 * 60 * 60 * 1000L;
final int micros_per_day = (int) MICROS_PER_DAY;
final int millis_per_day = (int)MILLIS_PER_DAY;
System.out.println(Long.toHexString(MICROS_PER_DAY)); // 141dd76000
System.out.println(Integer.toHexString(micros_per_day)); // 1dd76000
System.out.println("*********************************");
System.out.println(micros_per_day); // 500654080
System.out.println(millis_per_day); // 86400000
}
}
Puzzle 4:
添加long型整数的后缀时要使用L避免用l,同样不要单独使用小写字母l作为变量名,理由是显而易见的:l和1在大多数字体中太难区分。
Puzzle 5:
(1)和十进制数不同,当十六进制、八进制数的最高位是1时,表示它是一个负数(在十进制数中,表示一个负数要显式使用符号-)
(2)尽量避免混合类型运算,例如本例中的 long型和int型的加法,在java中,一个整数如果没有后缀L或l,则它是一个int型而不是long型。
JoyOfHex.java
<!---->public class JoyOfHex
{
public static void main(String[] args)
{
System.out.println(Long.toHexString(0x100000000L + 0xcafebabe));//cafebabe instead of 1cafebabe
System.out.println(Long.toHexString(0x100000000L + 0xcafebabeL)); // 1cafebabe
System.out.println(0xffffffffL); // 4294967295
System.out.println(0xffffffff); // -1
}
}
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.
分享到:
相关推荐
### Java Puzzlers知识点解析 #### 一、Java Puzzlers概述 《JavaSIG-Puzzlers.pdf》是一本由Joshua Bloch与Neal Gafter共同编写的书籍,该书主要探讨了Java编程语言中的一些非常规问题。这些问题是开发者在日常...
Expressive Puzzlers Puzzle 1: Oddity Puzzle 2: Time for a Change Puzzle 3: Long Division Puzzle 4: It's Elementary Puzzle 5: The Joy of Hex Puzzle 6: Multicast Puzzle 7: Swap Meat Puzzle 8: Dos Equis...
2 expressive puzzlers puzzle 1:oddity puzzle 2:time for a change puzzle 3:long pision puzzle 4:it s elementary puzzle 5:the joy of hex puzzle 6:multicast puzzle 7:swap meat puzzle 8:dos equis...
Expressive Puzzlers Puzzle 1: Oddity Puzzle 2: Time for a Change Puzzle 3: Long Division Puzzle 4: It's Elementary Puzzle 5: The Joy of Hex Puzzle 6: Multicast Puzzle 7: Swap Meat ...
Matlab领域上传的视频均有对应的完整代码,皆可运行,亲测可用,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作
Matlab领域上传的视频均有对应的完整代码,皆可运行,亲测可用,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作
SATA命令协议文档,新手必学,高手必经之路的利器。
白色大气风格响应式产品展示企业网页模板.zip
内容概要:文章介绍了如何使用Python开发一个简单的自动点餐程序。该程序通过显示菜单、接收用户点单输入并记录订单详情,最终计算总费用,展示了基础的交互流程和订单处理方法。 适合人群:Python初学者,对交互式程序设计感兴趣的学习者。 使用场景及目标:适用于希望了解基本交互式应用程序开发流程的新手程序员,目标是掌握Python中的函数定义、数据结构使用、流程控制以及简单的用户交互技术。 阅读建议:跟随程序步骤实践,尝试扩展或优化现有功能,如加入折扣计算、订单存储等功能,以增强理解和编程能力。
白色大气风格的境外游景区模板下载.zip
白色大气风格的商业模板下载.zip
华豫佰佳组合促销视图.sql
白色创意风格的室内装修设计CSS3模板.zip
platform-tools-latest-darwin.zip
CH579 以太网转串口 串口服务器代码 需要自己编程提升能力的非常值得参考的代码 几乎所有的编程思路编程技巧资源都涉及到了,代码简单易懂 ,注释清楚,本代码实现最串口服务器的功能,有电路图。
白色非常简洁的商务网站模板下载.zip
白色大气风格的美食DIY应用APP官网模板.zip
白色大气风格的女性风衣企业网站模板.zip
1. 平台在家电和电子产品方面的营运情况如何? 2. 哪些品牌和类别销量最高? 3. 用户消费规律 4. 哪些是我们的重点用户? 5. 平台有哪些优势和不足,需要如何改进?
白色大气简洁的汽车配件商城整站网站模板下载.zip