欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

逻辑运算符与位运算符

程序员文章站 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
...
相关标签: java