2018-4-14
总是将逻辑运算与位运算混淆,于是乎,在这里进行总结一下!
1.逻辑运算
逻辑运算又称布尔运算,它的结果应该是一个真假值,也就是true还是false。
1)&&:与运算,同为真时才为真。
2>1&&3>0 -> true
0>4&&9>2 -> false
2)||:或运算,同为假时才为假,也就是说有一个为真即为真。
2>3||3>2 -> true
2>3||3>4 -> false
3)!:非运算,! true=false,! false=true。
!2>3 -> true
!3>2 -> false
4)^:异或运算,按照每一位进行异或,相同为0,不同为1。
5^3:
5 -> 00...00101(一共32位)
3 -> 00...00011(一共32位)
结果为00...00110即为6
2.位运算
1)&:按位与
2)|:按位或
3)^:按位异或
4)~ :按位取反
5)<<:左移
6)>>:算数右移
百度了一下,发现位运算的作用真的特别多~
1.简单应用
1)&:多用来取位操作:
比如说判断数的奇偶性就是取最后一位,与1&,若结果为1,则为奇数,反之为偶数。
2)|:多用来赋值:
把某个数变成最接近的偶数:|1-1即可。
3)^:密码加密
:
两次异或同一个数之后结果不变,这个也可以用来在不会有溢出的风险下交换两个数的值。
2.进阶应用
1)计算一个32位整数的二进制中1的个数的奇偶性。
直接取得每一个二进制位的值如果是1的话就加1,时间复杂度为该数二进制表示的位数。
x = x^(x >> 1);
x = x^(x >> 2);
x = x^(x >> 4);
x = x^(x >> 8);
x = x^(x >> 16);
return x & 1;
其实还有很多,但是由于时间问题我就不一一赘述了…