Java 运算解析
运算
-
i++ 与 ++i 的区别?
i++ 表示先将 i 放在表达式中运算,然后再加 1,++i 表示先将 i 加 1,然后再放在表达式中运算
-
|| 和 |,&& 和& 的区别,逻辑运算符
& 和| 称为布尔运算符,位运算符;&& 和 || 称为条件布尔运算符,也叫短路运算符
如果 && 运算符的第一个操作数是 false,就不需要考虑第二个操作数的值了,因为无论第二个操作数的值是什么,其结果都是 false;同样,如果第一个操作数是 true,|| 运算符就返回 true,无需考虑第二个操作数的值;但 & 和 | 却不是这样,它们总是要计算两个操作数。为了提高性能,尽可能使用 && 和 || 运算符
-
异或 ^:两位相异为 1,相同为 0,又叫不进位加法
-
同或:两位相同为 1,相异为 0
-
switch 语句中的变量类型可以是: byte、short、int 或者 char。从 Java SE 7 开始,switch 支持字符串 String 类型了,同时 case 标签必须为字符串常量或字面量。
-
switch 语句可以拥有多个 case 语句。每个 case 后面跟一个要比较的值和冒号。
-
case 语句中的值的数据类型必须与变量的数据类型相同,而且只能是常量或者字面常量。
-
当变量的值与 case 语句的值相等时,那么 case 语句之后的语句开始执行,直到 break 语句出现才会跳出 switch 语句。
-
当遇到 break 语句时,switch 语句终止。程序跳转到 switch 语句后面的语句执行。case 语句不必须要包含 break 语句。如果没有 break 语句出现,程序会继续执行下一条 case 语句,直到出现 break 语句。
-
switch 语句可以包含一个 default 分支,该分支一般是 switch 语句的最后一个分支(可以在任何位置,但建议在最后一个)。default 在没有 case 语句的值和变量值相等的时候执行。default 分支不需要 break 语句。
String s = "a"; switch (s) { case "a": System.out.println("aaa"); break; case "b": System.out.println("bbb"); break; default: break; }
switch 不支持 long、float、double,switch 的设计初衷是对那些只有少数几个值的类型进行等值判断,如果值过于复杂,那么用 if 比较合适
-
break:跳出一层循环
-
移位运算:计算机里一般用补码表示数字,正数、负数的表示区别就是最高位是 0 还是 1
-
正数的原码反码补码相同,最高位为 0
100: 00000000 00000000 00000000 01100100
-
负数: 原码:最高位为 1,其余位置和正数相同 反码:保证符号位不变,其余位置取反 补码:保证符号位不变,其余位置取反后加 1,即反码 +1
-100 原码: 10000000 00000000 00000000 01100100 //32位 -100 反码: 11111111 11111111 11111111 10011011 -100 补码: 11111111 11111111 11111111 10011100
补码 → 原码:符号位不变,其余位置取反加 1
运算符:
>>
运算符:将二进制位进行右移操作,相当于除 2<<
运算符:将二进制位进行左移操作,相当于乘 2>>>
运算符:无符号右移,忽略符号位,空位都以 0 补齐
运算规则:
-
正数的左移与右移,空位补 0
-
负数原码的左移与右移,空位补 0
负数反码的左移与右移,空位补 1
负数补码,左移低位补 0(会导致负数变为正数的问题,因为移动了符号位),右移高位补 1
-
无符号移位,空位补 0
-
转载自:https://juejin.cn/post/7173653958907396104