4.8 逻辑运算符和位运算符
4.8.1 逻辑运算符
- && 并且
- || 或者
- ! 非(取反)
C/C++ 里面 认为 0 和 1 就是 假和真,即使C++ 中加入了 bool 类型,也没有改变这样的思想和规则。所以太过于灵活,比如 5 && 0 是可以比较的,但这其实是不对的,从严格的方面来讲,逻辑的比较,两侧至少 必须是 "逻辑类型"的,而 5 和 0 单纯的来看 只是 数字而已!
4.8.2 短路运算(逻辑中的短路)
- 短路运算:因为 && 和 || 两个逻辑运算符在判断逻辑的时候,为了提高效率,我们只要可以确定最终逻辑值的结果!那么我们就不再进行 条件的判断了!
int c = 5;
boolean d = c<4 && c++<4;
System.out.println(c);
System.out.println(d);
这样就会形成短路运算的情况,因为 c < 4 是 false,而 && 只要有一个条件是 false,整体的结果 就是 false,所以 后面的 c++<4 这个条件是不会被执行的,也不会被判断的!那么 c 的值 就一直 都是 “5”!
4.8.3 位运算符(二进制专属运算符)
我们都知道 位是计算机中最小的单位,是由 0 1 二进制数 构成的,而 位运算 也是 对 二进制数 进行的 特殊运算。
- & 并运算符:只有 1 & 1 = 1 剩下的情况 都是 0
- | 或运算符:只要有 1 存在结果就是 1。必须两个0 同时存在,结果才能是 0
- ^ 异或运算符:当 两个数不一样的时候 结果是 1,当两个数 一样的时候,结果是 0
- ~ 取反运算符:1 变 0,0 变 1
- >> 右移运算符:1001 右移一位 0100,若有符号位则 最左边 添补 符号位。
- << 左移运算符:1001 左移一位 0010
- >>> 无符号位右移:不管是正、是负。都自动添补 0,结果 表面上 看起来都是正数!