CoreJavaE10V1P3.5 第3章 Java的基本编程结构-3.5 操作符
最基本的操作为赋值操作,= 即赋值操作符
基本的算术操作为加、减、乘、除取模、除取余数,其对应操作符为 +、-、*、/、%
算术操作与赋值操作联合衍生为:+=;-=;*=;/=;%=;
由于处理器硬件的不同,浮点数在进行除法时会出现结果不一致的情况,为了解决此情况,在方法前加 strictfp 关键字,可以使此方法的严格进行浮点除操作,从而产生理想的结果。 例如:
public static strictfp void main(String[] args)
3.5.1 数学函数操作与数学常量
在Java中要使用各种数学函数和数学常量 可以使用 Math 类(java.lang.Math 默认加载),例如:
double x = 4;
double y = Math.sqrt(x);
System.out.println(y); // prints 2.0
Math.pow
Math.exp
Math.log
Math.log10
Math.sin
Math.cos
Math.tan
Math.atan
Math.PI
Math.E
floodMod 方法旨在解决长时间以来的整数除法产生的余数问题。思考这么一个表达式: n%2 ,每个人都知道,如果n是偶数,那么结果为0,入股n是偶数,那么结果为1,此外,如果n是负数,结果确实 -1,为什么呢?因为,在计算机产生之初,必须有个人必须为整数除数与余数建立被除数是负数的规则。数学家们早已有了最佳方案:余数必须≥0.但是,这些计算机先驱提出了一种看似合理,但是很不方便的解决方法。
想一下这个问题。你已经计算出了钟表里时针的位置(position),钟表有个延时(adjustmet),现在是几点,很简单
(position + adjustment) % 12
但是如果 延时是 负数,那么结果很可能是个负数,你要么引入一个新学科,要么使用
((position + adjustment) % 12 + 12) % 12
每种方法都有争议,floodMod解决了这个问题,floorMod(position + adjustment, 12)直接给出0-11的结果(不幸的是,如果除数是负数,则会给出负数结果,这种情况在实际中并不经常发生)。
public class Test{
public static void main(String[] args){
System.out.print( "-3/2 = "+ -3/2 +"%" + -3%2 );
}
}
结果为
Compiling Test.java.......
-----------OUTPUT-----------
-3/2 = -1%-1[Finished in 6.4s]
此处理解可能有误差,贴原文如下:
The floorMod method aims to solve a long-standing problem with integer remainders.
Consider the expression n % 2 . Everyone knows that this is 0 if n is even and 1 if n
is odd. Except, of course, when n is negative. Then it is -1 . Why? When the first
computers were built, someone had to make rules for how integer division and
remainder should work for negative operands. Mathematicians had known the
optimal (or “Euclidean”) rule for a few hundred years: always leave the remainder
≥ 0. But, rather than open a math textbook, those pioneers came up with rules
that seemed reasonable but are actually inconvenient.
3.5.2 数值类型转换
下图为8种基本内置类型(其实没有boolean类型)合法(默认、自动)的转换
虚线表示有精度损失。自动转换优先级为 double-float-long-int
3.5.3 造型运算符(强制类型转换)(Casts)
在上节中可见,int在需要时会自动转换为double,但是有时却需要double转换为int。Java允许这种转换,但是有精度损失。这时就用到了强制类型转换。
double x = 9.997;
int nx = (int) x;
nx值为9,小数部分截断。如果相对小数部分进行舍入,使用下列方法
double x = 9.997;
int nx = (int) Math.round(x);
nx值为10.
不要对boolean类型进行强制类型转换,会发生未知错误,如果实在要用,使用下列方法
b ? 1 : 0
3.5.4 带操作符的赋值
x+=4; 等价于 x=x+4 ;
如果x是int,x+=3.5 也是合法的。相当于将x赋值为(int)(x + 3.5)。
3.5.5 自增自减操作符
int m = 7;
int n = 7;
int a = 2 * ++m; // now a is 16, m is 8
int b = 2 * n++; // now b is 14, n is 8
m=++n ;
相当于 n++;m=n;
m=n++;
相当于 m=n; n++;
3.5.6 关系操作符与布尔操作符
Java中包含各种关系操作符,包括
像==,!=,>,<,<=,>=等的逻辑判断操作符
像&&,|| 的逻辑运算操作符
特殊的 condition ? expression 1 : expression 2 操作符
3.5.7 位操作符
& ("and") | ("or") ^ ("xor") ~ ("not")
<< 按位循环左移,一般32位一次循环,long型 64位一次循环,一般按位取模后进行移位,比如 1<<32 实际根本没有进行移位操作,1<<33 只操作了一次
>> 按位右移,高位补符号位,算术右移,取模后移位
>>> 按位循环右移,高位补0,逻辑右移,取模后移位
没有<<<,
注:在c/c++中不可确定>>是逻辑移位还是算术移位,看编译器。只能在正数中使用
3.5.8 运算符优先级
操作符 | 结合性 |
[] . () (method call) | |
! ~ ++ -- + (unary) - (unary) () (cast) new | 左 |
* / % | |
+ - | |
<< >> >>> | |
< <= > >= instanceof | |
== != | |
& | |
^ | |
| | |
&& | |
|| | |
?: | 左 |
= += -= *= /= %= &= |= ^= <<= >>= >>>= | 左 |
java中没有 , 操作符,不过可以在for循环中使用以分隔语句。 也没有sizeof()。
3.5.9 枚举类型(在操作符这章居然混入类型,其实使用时是一种自定义类型的操作,类似于class 与 c中的结构体,java中没有结构体)
enum Size { SMALL, MEDIUM, LARGE, EXTRA_LARGE };
默认初始化值为 null ,只能赋值为已经定义的枚举值与null
定义时各个选项值从1开始,直至用户自定义再开始。
第5章 详细讨论
CoreJavaE10V1P3.5 第3章 Java的基本编程结构-3.5 操作符的更多相关文章
- CoreJavaE10V1P3.10 第3章 Java的基本编程结构-3.10 数组(Arrays)
数组是存储同一类型数据的数据结构 数组的声明与初始化 int[] a; int a[]; int[] a = new int[100]; int[] a = new int[100]; for (in ...
- CoreJavaE10V1P3.9 第3章 Java的基本编程结构-3.9 大数值(Big Numbers)
如果基本的整型与浮点型不能满足需求,可以使用java.Math包提供的 BigInteger 和 BigDecimal 两个类,这两个类可以存储任意长度的数, BigInteger 实现的任意精度整数 ...
- CoreJavaE10V1P3.8 第3章 Java的基本编程结构-3.8 控制流程(Control Flow)
通过使用条件语句.循环语句可以实现流程的控制. 3.8.1 块作用域(Block Scope) 块(Block)就是由一对花括号包围起来的部分.他指定了一个变量的生存范围,与一个方法的操作范围. Ja ...
- CoreJavaE10V1P3.7 第3章 Java的基本编程结构-3.7 输入输出(Input ,Output)
3.7.1 读取输入 Scanner in = new Scanner(System.in); System.out.print("What is your name? "); S ...
- CoreJavaE10V1P3.6 第3章 Java的基本编程结构-3.6 字符串 String
String类(java.lang.String)就是Unicode字符序列,例如:"Java\u2122" 3.6.1 Substring 提取子串 String greetin ...
- CoreJavaE10V1P3.4 第3章 Java的基本编程结构-3.4 变量
1.在Java中,每一个变量都必须有一个类型,在变量声明是,类型必须在变量名之前.示例如下: double salary; int vacationDays; long earthPopulation ...
- CoreJavaE10V1P3.3 第3章 Java的基本编程结构-3.3 数据类型
3.3 数据类型 这里所说的数据类型是指 Java的8中基本数据类型,是原生就存在的. 不同进制数的字面值表示方法 进制 字面值表示方法 例子 是否默认 JDK版本支持 2进制 0b或0B前缀(每4位 ...
- CoreJavaE10V1P3.2 第3章 Java的基本编程结构-3.2 注释
3.2 注释 1. //形式注释 System.out.println("We will not use 'Hello, World!'"); // is this too cut ...
- CoreJavaE10V1P3.1 第3章 Java的基本编程结构-3.1 Java 最简程序
3.1Java最简程序 FirstSample.java public class FirstSample { public static void main(String[] args) { Sys ...
随机推荐
- 常用排序算法的python实现和性能分析
常用排序算法的python实现和性能分析 一年一度的换工作高峰又到了,HR大概每天都塞几份简历过来,基本上一天安排两个面试的话,当天就只能加班干活了.趁着面试别人的机会,自己也把一些基础算法和一些面试 ...
- c#后台输出javascript语句和一些通用验证的类
大家在用MVC的时候,经常会用到MODEL层的验证或者是正则表达式,我这边看到了一篇不错的文章,转载过来http://blog.csdn.net/accpxcb/article/details/311 ...
- 2014.3.6-C语言学习小结
链表基础: 知识点: 1.链表基础 2.节点的创建和添加 llist_append_node 3.链表的遍历 llist_print_each 4.链表的查找与修改 5.链表的插入与删除 6.链表的销 ...
- 编写简单的hashCode方法
为什么要编写hashCode方法 hashCode在平时不常自己去编写,但是在真正高质量的代码中却是必不可少的. 看看Java中的Object对hashCode方法的描述: 1.返回对象的哈希码,是为 ...
- 设计适用于SOA的类型
我们经常把一个项目分层去开发,无论是通过三层来面向对象开发还是用WCF或Remoting等面向服务的方式开发,返回值只有一个,如果底层出错了我们一般写日志来记录这些错误,然后分析错误来解决问题,但用户 ...
- T4模板与数据访问层的分离
当在企业级应用中使用EF时,会发现实体类库与数据访问层是分离的. 来一张效果图. 具体步骤: 1.运用EF生成原始的实体类 在程序集中添加完ADO.NET实体数据模型后,生成相应的实体类,此时,T4模 ...
- Leapin' Lizards
Leapin' Lizards 题目大意: 在一个网格地图中有一些高度不同的石柱,一些石柱上站着一些蜥蜴,你的任务是让尽量多的蜥蜴逃到边界外. 每行每列中相邻石柱的距离为1,蜥蜴的跳跃距离是d,即蜥蜴 ...
- Spring整合Hibernate笔记
1. Spring 指定datasource a) 参考文档,找dbcp.BasicDataSource i. c3p0 ii. dbcp <bean id="dataSource&q ...
- cocos2d-x 3.0 cocos run Couldn't find the gcc toolchain.
出现这个错误是NDK_ROOT环境变量没有设置好,要么设置错了,要么没有重启终端(也就是环境变量还没有生效).我就是因为没有重启终端坑了一个晚上,我只能帮你到这了,玩cocos2d-x 3.0的朋友, ...
- NDepend 3.0已与Visual Studio集成
NDepend 3.0已与Visual Studio集成 投递人 itwriter 发布于 2010-02-10 16:17 评论(0) 有1638人阅读 原文链接 [收藏] « » NDepe ...