java从小白到老白③

PS:①小陌笔记中蓝色紫色等一切花哨字体皆用来引入知识点(废话流),可忽略不计 。

②黑字正文小陌竭力向言简意赅靠近再靠近。

③红色字体小陌觉得重要的地方

  • 老规矩,题目引入:
	        int a = 1;
		int b = 2;

		System.out.println(++a == 1 && ++b == 2);
		System.out.println(a);
		System.out.println(b);
                int x = 1;
		int y = 2;

		System.out.println(++x == 1 & ++y == 2);
		System.out.println(x);
		System.out.println(y);

以上代码有何不同?

这还不简单,第二段漏了个&对不对!

让我们先看输出结果:

①false
2
2
②false
2
3

对照结果会发现,&&操作中没有接着执行后面的判断,直接判定为false

虽然&与&&的最终结果一样,但是&&具有短路功能,左边一方为false,直接判为false,不再执行右边。

而|与||同理,因为&&与||的相对高效率,所以我们常用的逻辑运算符是&&和||这俩成双成对的,而不是那种光棍吧唧的死脑筋~

好叭,需要承认,小陌这种单身猿,之所以单身,像&和|不被多用一样,应该也是有理由的

扫描二维码关注公众号,回复: 4450167 查看本文章

  •  位运算

  1. ^异或,同则1,不同则0

  2. ~按位取反,1变0,0变1

①一个数据对另一个数据位异或^两次,该数本身不变

<<左移运算符 左边最高位丢弃,右边补齐0
  >>有符号位右移运算符 最高位是0,左边补0;最高位是1,左边补齐1
  >>>无符号位右移运算符 不管最高位0还是1,左边补齐0
  eg1:3<<2 等价于 3*2^2
      8>>2 等价于 8/2^2
      但是对于>>与>>>往往需要严格按照位运算进行

eg2: -10的右移操作
        System.out.println(-10>>>3);//536870910
        System.out.println(-10>>3);//-2
    原码:10000000 00000000 00000000 00001010
    反码:11111111 11111111 11111111 11110101
    补码:11111111 11111111 11111111 11110110
    
      >>  11111111111 11111111 11111111 11110(110)补码
          11111111111 11111111 11111111 11101反码
          10000000000 00000000 00000000 00010原码
          System.out.println(-10>>3);//-2
          
     >>>  00011111111 11111111 11111111 11110(110)原码//注意哦( • ̀ω•́ )✧原码既然是正数,则原反补相同
          System.out.println(Integer.parseInt("11111111111111111111111111110", 2));//536870910

(既然是位运算,记得把数据转化为二进制再进行相应运算,注意操作的是补码,如果是负数记得还原为原码)

猜你喜欢

转载自blog.csdn.net/Moliay/article/details/84864593