什么是位运算
程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算说穿了,就是直接对整数在内存中的二进制位进行操作,也就是对数据进行二进制的计算;
位运算是怎么计算的
1、&
将两个数字转化为二进制数字,对每个数位上的数字进行比较,如果两个数位上的数字相同则取其值,如果两个数位上的数字不同则取0,如111&100=100,100&101=100;
2、|
将二进制的数字的每个数位的数字进行比较,只要两个数字中有一个是同数位上是1,则这个数位的值取1,如:111|101=111,
110&110=110;
3、^
运算规律,将同数位的数字看为boolear值,0为false,1为true。0和0相当于两个false结果为ture,但是这个运算符是取反,所以结果为false,也就是0,同理1和1,结果为ture,取反结果为0,1和0,结果为false,取反为true也就是1,例子:110^101=011,
101^111=010,101^101=000;
4、<<
左移,运算符后面是几就向做移动几位,如:101<<2=10100;
5、右移
右移跟左移同理,如;101>>2=1;
6、~
反码,就是所有数位的值1变为0,0变为1,也就是给一个数取反-1,如:~110=001,~101=010;
位运算能做什么
1、乘除2
左移或右移n位相当于乘或除2的n次方,例如:12>>1=6,12>>2=3;
2、判断奇偶数
将该数字与1按位与,如果返回的结果是1,则是奇数,如果返回的结果是0则是偶数,如:5&1=1,4&1=0;
3、取余
只不过取余是除以2的整数倍取余,a&b相当于a除以2的(b-1)次方获得的余数,如:5&3=1;
4、求相反数
~a+1就是获得当前数字a的相反数,如~-1+1=1,~100+1=-100;