【Java基础笔记】1-5 运算符
本篇主要介绍了 Java 中的常见运算符:算术运算符(含其他数学运算 Math)、赋值运算符、关系运算符、逻辑运算符、位运算符、条件运算符和扩展赋值运算符。
§1-5 运算符
目录
- §1-5 运算符
- 1-5.1 算术运算符
- 1-5.1.1 四则运算
- 1-5.1.2 扩展赋值运算符
- 1-5.1.3 模运算
- 1-5.1.4 自增自减运算符
- 1-5.1.5 其他数学运算
- 1-5.2 关系运算符
- 1-5.3 逻辑运算符
- 1.5.4 位运算符
- 1-5.5 条件运算符
- 1-5.6 扩展:源码、反码与补码
- 1-5.1 算术运算符
Java 语言支持如下运算符:
- 算术运算符:+, -, *, /, %, ++, --
- 赋值运算符:=
- 关系运算符:>, <, >=, <=, ==, !=,
instanceof
- 逻辑运算符:&&, ||, !
- 位运算符:&, |, ^, ~, >>, <<, >>>
- 条件运算符:?, :
- 扩展赋值运算符:+=, -=, *=, /=
不同运算符所执行的运算有优先级之分,若要强调优先级,可用()
括住该运算。
1-5.1 算术运算符
1-5.1.1 四则运算
数学中的加减乘除四则运算在 Java 中也支持,请看下面的例子:
public class Operators { public static void main(String[] args) {
//二元运算符
int a = 10;
int b = 20;
long c = 123123123123123L;
byte d = 120;
short e = 8;
System.out.println(a+b);
System.out.println(a-b);
System.out.println(a*b);
System.out.println(a/b);
}
}
编译后运行,得到结果如图所示:
可见在运算a/b
时,结果本应带有小数,却因为计算结果的数据类型为int
而自动舍弃小数,为避免这种情况发生,可在计算时强制转换数据类型,见下:
System.out.println(a/(double)b);
值得注意的是,默认情况下,计算后的结果的数据类型为整型,但计算时变量数据类型高于整型时,则输出结果为最高级数据类型,以前文给出的例子为例:
System.out.println(a+b+c+d+e); //Long System.out.println(a+b+d+e); //int
从上图可知,四则运算结果默认为整型,而编译后运行结果(分割线下)则体现了上文中 “以参与运算的变量最高数据类型输出”。
1-5.1.2 扩展赋值运算符
扩展赋值运算符是一种赋值时的简易写法。如:
a+=b //即 a = a + ba-=b //即 a = a - b
在执行输出语句时,+
既可以作字符串连接符,也可以作算术运算符,但若+
跟在字符串后,则在不加任何优先级时,其后所有变量都将转换为字符串,并将字符串内容连接。如:
1-5.1.3 模运算
Java 中的模运算,即数学当中的取余。a % b
(a
b
皆为整型)意为a / b
后取其余数,数据类型为整型。
1-5.1.4 自增自减运算符
在前文我们有提到算数运算符中还有++
--
这两个运算符,它们是自增则减运算符,使用时,a++
即a = a + 1
;同理,a--
即a = a - 1
。但值得注意的是,自增自减运算符的位置不同,它们的执行时机也不同。
public class SelfOps { public static void main(String[] args) {
//自增自减运算符为一元运算符
int a = 3;
int b = a++;
System.out.println(a);
System.out.println(b);
int c = ++a;
System.out.println(a);
System.out.println(c);
}
}
编译后运行,得到如图所示结果:
当自增自减运算符在后时,先执行代码,后自增 / 自减;当自增自减运算符在前时,先自增 / 自减,后执行代码。
1-5.1.5 其他数学运算
若要对一个数作幂运算、求绝对值等较为复杂的数学运算时,我们需要借助一些工具实现它:Math
。快捷输入方式:Math.<运算名>(表达式参数)
public class Maths { public static void main(String[] args) {
//Math
double pow = Math.pow(2, 3);
System.out.println(pow);
System.out.println("==============");
int abs = Math.abs(-127);
System.out.println(abs);
System.out.println("==============");
double sin = Math.sin(3.14);
System.out.println(sin);
System.out.println("==============");
}
}
编译后运行,得到如图所示结果:
1-5.2 关系运算符
关系运算符判断关系是成立与否后,输出的结果为布尔值,有两种结果:true
或false
。
public class RelationalOps { public static void main(String[] args) {
//判断结果输出为布尔值
int a = 10;
int b = 20;
//输出比较
System.out.println(a>b);
System.out.println(a<b);
System.out.println(a==b);
System.out.println(a!=b);
}
}
编译后运行,得到结果如图所示:
1-5.3 逻辑运算符
Java 语言中支持如下逻辑运算符:与(and, &&)、或(or, ||)、非(not, !)
请看下方的例子:
public class LogicalOps { public static void main(String[] args) {
//逻辑运算符
boolean a = true;
boolean b = false;
//输出结果:逻辑运算
System.out.println("a && b :"+(a && b)); //与运算:同真才为真
System.out.println("a || b :"+(a || b)); //或运算:有一真为真,同假为假
System.out.println("!( a && b ): "+(!(a && b))); //取反:真时得假,假时得真
}
}
编译后运行,得到结果如图所示:
其中,+
起到连接字符串的作用,是字符串连接符。
在运用逻辑运算符时,有一个特性值得我们注意。请看下面例子:
int c = 5; boolean d = (c<4) && (c++<4); //结果一定为 false
System.out.println(c); //变量 c 的值没有发生变化:短路运算
System.out.println(d);
编译后运行,得到如图所示结果:
解释:在上述例子中,d
永远为false
,因为其表达的与运算中的第一个条件c<4
已经为false
,则整条式子计算后结果为false
。此时,与运算符后的条件c++<4
没有执行,被跳过,因而该计算被 “短路” ,c
的结果仍为5。
注:短路计算常用于与运算中。
1.5.4 位运算符
Java 中有如下常见位运算符:&
|
^
~
,左移右移运算符<<
>>
(仅用于整型)。
其意义见下:
/* A = 0011 1100
B = 0000 1101
==========================
位运算符:
A & B = 0000 1100 类似于与运算,相同位都为1时才取1(同真为真,其余为假)
A | B = 0011 1101 类似于或运算,相同位有1取1(有一真为真,同假取假)
A ^ B = 0011 0001 异或运算,相同位相同为0,不同取1(同假异真)
~ B = 1111 0010 取反,依次按位取反
==========================
左移右移运算符:
思考一个问题:2 * 8 如何计算效率最高?
在二进制中:
2 = 0000 0010
3 = 0000 0011
4 = 0000 0100
8 = 0000 1000
16= 0001 0000
2 * 8 = 2 * 2 * 2 * 2 = 2 << 3 = 16
可如此简单理解:
a << b = a * (2^b)
a >> b = a / (2^b)
*/
我们可以尝试2 << 3
并查看结果:
1-5.5 条件运算符
条件运算符用法:x ? y : z
上述语句意思为:若变量x
为true
,则执行y
,否则执行z
,这是一个三元运算符。
请看例子:
1-5.6 扩展:源码、反码与补码
详细内容请参见:原码, 反码, 补码 详解
作者:张子秋
出处:http://www.cnblogs.com/zhangziqiu/
以上是 【Java基础笔记】1-5 运算符 的全部内容, 来源链接: utcz.com/z/390461.html