1. 位移运算符

>>1 <<1 >>>1 <<<1
右移一位(带符号位) 左移一位(带符号位) 右移一位(带符号位) 左移一位(不带符号位)

2. 按位运算符和逻辑运算符

逻辑运算符短路功能,拿&&&来举例:

  1. public class Test {
  2. public static void main(String[] args) {
  3. boolean a = true;
  4. boolean b = true;
  5. boolean c = (a = (1==0)) & (b = (1==0));
  6. System.out.println(a+","+b+","+c);
  7. }
  8. }

运行结果:

false,false,false

  1. public class Test {
  2. public static void main(String[] args) {
  3. boolean a = true;
  4. boolean b = true;
  5. boolean c = (a = (1==0)) && (b = (1==0));
  6. System.out.println(a+","+b+","+c);
  7. }
  8. }

运行结果:

false,true,false

原因:

&&有短路功能,因为符号两端都为true才返回true,所以如果左端为false结果肯定为false,造成短路,符号右边的不会运行,所以第二段代码,b并不会被赋为false。

PS:异或运算(_^_)没有短路功能

3浮点数

  1. public class ClassLoaderTest {
  2. public static void main(String[] args) {
  3. float a = 1f;
  4. float b = 0.9f;
  5. System.out.println(a-b);
  6. }
  7. }

运行结果:

0.100000024

原因:
浮点数是使用科学计数法来表示的,科学计数法的有效数字必须在[1,9]之间,所以,科学计数法不能表示0,所以不可能为0
结果0.100000024的具体解释:
IMG_20201114_213108.jpg
IMG_20201114_212734.jpg
PS: 科学计数法的两种写法:

4x10 = 4e6

补充链接:

  1. 关于浮点型损失精度的分析
  2. 浮点数取值范围的计算

    4.