逻辑运算(布尔运算)
逻辑运算符 | 逻辑功能 | 示例 |
---|---|---|
&(与) | 有false则false (如果在多个表达式中有条件返回false,剩余的条件也要判断) | false & true = false |
|(或) | 有true则true (如果在多个表达式中有条件返回true,剩余的条件也要判断) | false | true = true |
&&(短路与) | 有false则false (若&&左边表达式或者值为false则右边不进行计算) | false && true = false |
||(短路或) | 有true则true (若||左边表达式或者值为true则右边不进行计算) | false || true = true |
!(非) | 非false则true,非true则false | ! false = true |
^(异或) | 相同为false,不同为true | true & false =true |
位运算
位运算符用来对二进制位进行操作,Java中提供了如下表所示的位运算符:位运算符中,除 ~ 以外,其余均为二元运算符。操作数只能为整型和字符型数据
参考链接:https://blog.csdn.net/Marccco/article/details/88709481
位运算符 | 功能 | 示例 |
---|---|---|
按位与运算符(&) | 两位同时为“1”,结果才为“1”,否则为0 | 1 & 1= 1, 0 & 0 = 0 |
按位或运算符(|) | 参加运算的两个对象只要有一个为1,其值为1 | 1 & 0 =1 |
异或运算符(^) | 参加运算的两个对象,如果两个相应位为“异”(值不同),则该位结果为1,否则为0 | 1 ^ 0 = 1 |
取反运算符(~) | 对一个二进制数按位取反,即将0变1,1变0 | ~ 0 = 1, ~ 1 = 0 |
左移运算符(<<) | 将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0) | 1 << 2 = 4 |
右移运算符(>>) | 一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃 | 4 >> 2= 1 |
& , | , ^ 既可以当做逻辑运算符,还可以用作位运算符,当操作符两边的表达式不是boolean类型时,&表示按位与操作.(位运算符).
异或运算符(^)的一些常见用法
①:交换两个数
int a=10,b=5;
a^=b;
b^= a;
a^= b;
// a=a^b;
最后输出 a=5, b=10;
//第一次运算
a=10 --> 00001010
b=5 --> 00000101
a=a^b --> 00001111 = 15
a=15
//第二次运算
a=15 --> 00001111
b=5 --> 00000101
b=a^b --> 00001010 = 10
b=10
//第三次运算
a=15 --> 00001111
b=10 --> 00001010
a=a^b --> 00000101 = 5
a=5
②:翻转特定位,保留特定位
0异或任何数,其结果=任何数;1异或任何数,其结果=任何数取反;任何数异或自己,等于把自己置0
a = 11110000,我想把前4位翻转(即0变为1,1变为0),则只需a^11110000异或运算,a就会变为00000000
a = 11110000,我想保留前4位不变,即a ^ 00000000,a不变
③:偶数+1,奇数-1
a=5,b=9;
a^=1;
b^=1;
最后输出 a=6, b=8;