1.非比较求最大值
#define g(x) (((x)>>31)&1)
#define ABS(x) (((x)^(-g(x)))+ g(x))
#define MAX(a,b) ( ((a)+(b)+ABS((a)-(b)) )>>1)
2.按位做加减法
const int N=4,_S=1<<(N-1);
const int masks=(1<<N)-1;
const int n=_S-1,m=-_S;
int k[N];
void Init()
{
for(int i=0;i<N;++i) k[i]=1<<i;
}
inline int add(int a,int b)
{
int c=0;//同时存放进位
int carry=0;
for(int i=0;i<N;++i)
{
c=c|((a^b^carry)&k[i]);
carry=( (a&b&k[i])|(a&carry)|(b&carry))<<1;
}
if(c & _S) return -(-c&masks);
return c;
}
inline int sub(int a,int b)
{
return add(a,-b);
}
bool on(const int k)
{
return k>=m && k<=n;
}
3.计算1的位数
int Count(unsigned int x) {
x = x - ((x >> 1) & 0x55555555);
x = (x & 0x33333333) + ((x >> 2) & 0x33333333);
x = (x + (x >> 4)) & 0x0F0F0F0F;
x = x + (x >> 8);
x = x + (x >> 16);
return x & 0x0000003F;
}