intconditional(int x, int y, int z) { x = !!x; return (~x + 1) & y | ~(~x + 1) & z; }
isLessOrEqual
1 2 3 4 5 6 7 8 9 10 11 12
* 实现<= * 主要思想是x-y的符号位 * 要防止整型溢出 int isLessOrEqual(int x, int y) { int sub = x + (~y + 1); int xf = !(x >> 31); int yf = !(y >> 31); int sf = !(sub >> 31); int flag1 = (!xf & yf); //x- y+ x int flag2 = !(xf & !yf); return flag2 & (!sf | !(x ^ y) | flag1); }
logicalNeg
实现逻辑非!
1 2 3 4
intlogicalNeg(int x) { int sign = x | (~x + 1); return (sign >> 31) + 1; }
howManyBits
通过二的倍数不断逼近,得到所需位数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
inthowManyBits(int x) { int b16,b8,b4,b2,b1,b0; int sign = x >> 31; x = (sign & ~x)|(~sign & x); b16 = !!(x>>16)<<4; x = x >> b16; b8 = !!(x>>8)<<3; x = x >> b8; b4 = !!(x>>4)<<2; x = x >> b4; b2 = !!(x>>2)<<1; x = x >> b2; b1 = !!(x>>1); x = x >> b1; b0 = x; return b16+b8+b4+b2+b1+b0+1; }