逻辑运算符与位运算符
程序员文章站
2022-05-18 15:57:15
...
逻辑运算符与位运算符
逻辑运算符基本定义
&:两个都为真才真(有一个false就false)
|:有一个真就是真(有一个true就true)
^:一样为false,不同为true
!:真为假,假为真
&&:两个都为真才真(有一个false就false)
||:有一个真就是真(有一个true就true)
-
&与&&的区别
- &:&前后都要判断,才得出结果
- &&:只要&&前面能决定结果,就不执行后一个。如:false&&true,执行到false就得出结果,没有执行到true
-
|与||的区别
-
|:|前后都要判断,才得出结果
-
||:只要||前面能决定结果,就不执行后一个。如:true||false,执行到true就得出结果,没有执行到false
-
结果:
false
a=2
false
a=1
true
a=2
true
a=1
位运算符定义
位运算符用来操作整数基本数据类型中的二进制位,按位运算就是对左右两个参数中对应的位执行布尔运算,0是false,1是true,位运算符&、|、^ 也可以当做逻辑运算符来使用。
① & 与:有0出0,全1出1;
② | 或:有1出1,全0出0;
③ ~ 非:按位取反;
④ ^ 异或:相异为1,相同为0,一个数异或同一个数两次,结果还是那个 数. 用做一个简单的加密思想.;
⑤ << 向左移动:去掉高位,低位补0,在某些范围的数据移动n位相当于 乘于2^n;
⑥ >> 向右移动:去掉低位,高位补充,如果是负数,那么高位补充的是 1,如果是正数,高位补充的是0;
⑦ >>> 无符号向右移动:不管是正数还是负数,高位永远补充的是0。
位运算符可以用来加密数据,加密的数据无法恢复;位运算符也可以用来控制硬件的功能状态,开和关。
注意:
1.位运算符只能用于整型数据运算,不能用于运算浮点数据,如 10.23 & 1.2 是错的,无法通过编译;
2.位运算符返回的运算结果是int类型。
案列1:置换两个数
初始值:i = -1
正码:1000 0001
反码:1111 1110
补码:1111 1111
初始值:j = 2
正码:0000 0010
反码:0000 0010
补码:0000 0010
第一运算语句:
i = (byte)(i ^ j)
i = 1111 1111 ^ 0000 0010 = 1111 1101(补码)
第二运算语句:
j = (byte)(i ^ j)
j = 1111 1101 ^ 0000 0010 = 1111 1111(补码)
第三运算语句:
i = (byte)(i ^ j)
i = 1111 1101 ^ 1111 1111 = 0000 0010(补码)
最终:
i = 0000 0010(补码) -> 0000 0010(反码) -> 0000 0010(正码) -> 2(十进制)
j = 1111 1111(补码) -> 1111 1110(反码) -> 1000 0001(正码)
-> -1(十进制)
案列2:求某个值的某次方
结果:
2 ->2+2^0
4 ->2+2^1
8 ->2+2^2
16 ...
32
64
128
256
512
1024
初始值:base = 2, i = 0
正码(取后八位):0000 0010
反码(取后八位):0000 0010
补码(取后八位):0000 0010
2<<0 = 0000 0010 << 0 = 0000 0010 = 2
初始值:base = 2, i = 1
正码(取后八位):0000 0010
反码(取后八位):0000 0010
补码(取后八位):0000 0010
2<<0 = 0000 0010 << 1 = 0000 0100 = 4
初始值:base = 2, i = 2
正码(取后八位):0000 0010
反码(取后八位):0000 0010
补码(取后八位):0000 0010
2<<0 = 0000 0010 << 2 = 0000 1000 = 8
...