目录
这里简单记录一些比较不同的,新颖的,或者值得注意的,以前没注意到的知识点。
运算符
1.算术运算符
①加,减,乘,除,取余 + - * / %
加减乘没什么意思,这一部分其实是和上一篇博客的类型转换,以及类型提升有关联。
1. 除:
除数不能为0
int/int结果为int,int/float结果为float,int/double结果为double,这就是类型提升的原理。
2. 取模
Java中的%与C/C++中的不同,C/C++中只能对整数取模,而Java中可以对小数取模。
其中的f不可省略,因为若无f,则1.7 0.6则为double型字面值常量。结果是不能用float接收的。
②增量运算符
+= -= *= /= %= <<= >>= >>>= .....
没什么好说的,很方便,并且有一个特殊点:
可以看到,+= -= 运算符会自动进行强制类型转换。比如 f1 float变量直接减一个double字面值常量然后赋值给一个float变量是非法的,而-=就可以,说明编译器自动进行了一些处理,可见 += -= *= /=等运算符的方便之处。
③自增自减运算符++--
略了,没什么变化,没什么值得注意的。
2. 关系运算符
!= == < > <= >= 返回值是boolean类型,if,for,等条件判断部分,只能是boolean类型。
3. 逻辑运算符
逻辑运算符的操作数和返回值都是boolean类型
&&逻辑与 ||逻辑或 !逻辑非
最重要的就是逻辑与 和 逻辑或的短路求值了,这个在避免C++的非法访问时经常使用。
string s;
if(cin >> s && s[0] == 'q')
return;
String s;
if(!cin>>s || s == "quit")
return;
Java如何实现类似代码目前还不会......
当 & 和 | 的左右操作数的结果是boolean类型时,也支持&& || 的功能,但是不支持短路求值。
4. 位运算符
Java 中对数据的操作的最小单位不是字节, 而是二进制位.
位运算符主要有四个: & | ~ ^
位操作表示 按二进制位运算. 计算机中都是使用二进制来表示数据的(01构成的序列), 按位运算就是在按照二进制位的 每一位依次进行计算
& 按位与:两个操作数,对应二进制位都为1则结果为1,否则为0
| 按位或:两个操作数,对应二进制位都为0则结果为0,否则为1
~ 按位取反:一个操作数,二进制位的1变为0,0变为1
^ 按位异或:两个操作数,异,对应二进制位相同为0,相异为1
当 & | 左右操作数结果为boolean类型时,才表示逻辑运算,操作数为整型时,表示位运算。
5. 移位运算符
移位运算符有三个,操作的都是二进制位。
<< 左移运算符:移掉最左侧的二进制位,右侧补0
>> 右移运算符:移掉最右侧的二进制位,左侧补符号位(正数补0,负数补1)
>>> 无符号右移运算符:移掉最右侧的二进制位,左侧补0(无论正负)
1. 左移 1 位, 相当于原数字 * 2. 左移 N 位, 相当于原数字 * 2 的N次方.
2. 右移 1 位, 相当于原数字 / 2. 右移 N 位, 相当于原数字 / 2 的N次方.
3. 由于计算机计算移位效率高于计算乘除, 当某个代码正好乘除 2 的N次方的时候可以用移位运算代替.
4. 移动负数位或者移位位数过大都是未定义的行为。
可以看到,-15无符号右移,则符号位补0。那么就会变成一个很大的正数。
6. 条件运算符
表达式1 ?表达式2 :表达式3
Java唯一一个三目运算符。表达式1的结果必须是boolean类型。同样存在短路求值,表达式1结果为true,执行表达式2,并以此作为整个表达式的结果。表达式1结果为false时,执行表达式3,并以此作为整个表达式的结果。