位运算符
位运算符有三个 :<< >> >>>
都按照二进制位来运算。
左移<<:最左侧位不要,最右侧补0
int a=0x10;
System.out.printf("%x\n",a<<1);
//运行结果(注意,按十六进制打印)
//20
右移>>:最右侧位不要了,最左侧补符号位(正数补0,负数补1)
int a = 0x10;
System.out.printf("%x\n", a >> 1);
// 运行结果(注意, 是按十六进制打印的)
//8
int b = 0xffff0000;
System.out.printf("%x\n", b >> 1);
// 运行结果(注意, 是按十六进制打印的)
ffff8000
无符号右移>>>:最右侧不要,最左侧补0
int a = 0xffffffff;
System.out.printf("%x\n", a >>> 1);
// 运行结果(注意, 是按十六进制打印的)
//7fffffff
注意:
- 左移 1 位, 相当于原数字 * 2. 左移 N 位, 相当于原数字 * 2 的N次方.
- 右移 1 位, 相当于原数字 / 2. 右移 N 位, 相当于原数字 / 2 的N次方.
- 由于计算机计算移位效率高于计算乘除, 当某个代码正好乘除 2 的N次方的时候可以用移位运算代替.
- 移动负数位或者移位位数过大都没有意义
条件运算符
条件运算符只有一个: 表达式1?表达式2:表达式3
当 表达式1 的值为 true 时, 整个表达式的值为 表达式2 的值; 当 表达式1 的值为 false 时, 整个表达式的值为 表达式
3 的值.
也是 Java 中唯一的一个 三目运算符, 是条件判断语句的简化写法.
//求两个数的最大值
int a=10;
int b=20;
int max=a>b?a:b;