一、一些应用技巧数组
(1) 判断int型变量a是奇数仍是偶数 io
a&1 = 0 偶数function
a&1 = 1 奇数变量
(2) 取int型变量a的第k位 (k=0,1,2……sizeof(int)),即a>>k&1原理
(3) 将int型变量a的第k位清0,即a=a&~(1<<k)技巧
(4) 将int型变量a的第k位置1, 即a=a|(1<<k)方法
二、交换变量co
常规的交换变量的方法须要一个临时变量:tmp=null; tmp = a; a=b;b=tmp;数字
位运算: a^=b;b^=a;a^=b; 不须要额外的变量便可交换二者,原理是:位运算
由等式一、2可得:b = b^a^b;因为任何值异或自己均为0,任何值异或0为其自己,故 b=a;
故等式3为: a = a^b^a; 即a=b;
三、正数变为负数、负数变为正数(涉及到反码、补码、原码的概念和转换问题,请自行脑补)
a = -1;
function convert(int a){return ~a+1; }
convert(a);
四、取符号位(负数为-1, 正数为0)
a>>31
五、乘以2(固然也能够乘以四、8等)
a<<1
六、除2
a>>1
七、比较两整数的大小(返回值 0:等于 1大于 -1小于) 第二行没看懂原理
function compareInt(a, b){
if(a^b == 0){return 0;}
if ( ( (a + (~(b & 0x7fffffff)) ^ a) & (((~a) | b)) ) >>31 ) {return -1};
return 1;
}
八、消支最后一位1(仅限最后一位为1的数字,不然会出现不可控的数字)
x&(x-1)
九、应用于数组中,有一个数只出现了一次,其它的数都出现2的位数次,找出出现一次的数
a^b^c = a;