:
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...
1. **前端验证**:前端验证是在用户提交数据到服务器之前,在客户端进行的验证过程。通过使用Expressive Annotations,开发者可以创建复杂的验证规则,例如检查输入的日期是否在特定范围内,或者验证密码强度等。 2...
Low-Rank Adaptation (LoRA), a parameter-efficient fine-... This paper takes the first step to bridge this gap by theoretically analyzing the expressive power of LoRA. We prove that, for fully connected
Swoole + Zend Expressive 该软件包为Swoole提供了Zend Expressive 3跑步者。 安装 安装Swoole $ pecl install swoole-2.1.1 安装Zend Expressive $ composer create-project zendframework/zend-expressive-...
Super Expressive是一个JavaScript库,可让您以几乎自然的语言构建正则表达式-无需任何额外的依赖关系,并且代码占用量小(压缩+ gzip不到3kb!)。 Super Expressive Super Expressive是一个JavaScript库,可让您以...
easy_to_use,_powerful_&_expressive_command_line_ar_clipp
expressive-date, php DateTime类的流畅扩展 表示日期php DateTime类的流畅扩展。 目录安装工具Composer手动加载 Laravel 4使用情况获取实例快速帮助程序克隆处理日期日期和日期之间的差异( )比较日期与日期交互。...
快速_数字_信号_处理_(DSP)_包_音频_Expressive_Digital_Signal_Processing_(DSP)_package_audiolazy.zip
Speaker: 鲁葳, an agile developer working for Neo. RSpec is a popular tool for TDD with ruby. In this talk, we start with subject and let. Then we dive into should_receive vs. asserting side effects....
Expressive是基于ExpressJ和最佳实践构建的NodeJS REST API框架,可实现顺畅的开发。 功能包括: 模板路由轻松编写具有声明性终结点(包括嵌套终结点)的API 具有内置功能的可插拔中间件 像Express一样注入自己的...
现在它确实支持Zend Expressive 3.* 要与Zend Expressive 1.*一起使用,请安装版本1.1.4要与Zend Expressive 2.*一起使用,请安装版本2.0.0 loggables设置由狂饮日志格式的启发。 您可以在要从配置文件中记录的请求...
expressive-ts是一个功能编程库,旨在简化构建复杂的正则表达式。 表现力 目录 安装 npm install fp-ts expressive-ts 或者 yarn add fp-ts expressive-ts 注意: fp-ts是expressive-ts的对等依赖项 为什么? ...
"restbeer-expressive:表现力样本" 这个标题表明这是一个关于使用Expressive框架构建RESTful API的示例项目。REST(Representational State Transfer)是一种设计网络应用的架构风格,通常用于创建Web服务。...
1. `Expressive.dtd`: 这可能是一个文档类型定义(DTD),用于定义XML文档的结构和规则,可能是用来规范Expressive应用的配置文件格式。 2. `overview.html`: 这是项目的概述文档,可能包含项目的目标、特点、使用...
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 ...
cd dms-expressive-skeleton composer install 更新.env文件 打开.env文件,然后根据您的数据库修改用户名和密码。 移民 # Make migration script ./console dms:make:migration init # Check status of migration ...
要与zend expressive的较早版本一起使用,请参阅版本0.1.9。 要求 PHP 7.1或以上 安装 使用composer安装最新版本。 有关如何获取作曲家或如何使用它的信息,请访问 。 $ composer require dwendrich/expressive-...