a>b ? a : b
int
max(int
a,int b){
return b & ((
a-b) >>
31) |
a & (~(
a-b) >>
31);
}
对2的n次方取余
int quyu(int m,int n){//n为
2的次方
return m & (n -
1);
/*如果是
2的幂,n一定是
100... n-
1就是
1111....
所以做与运算结果保留m在n范围的非
0的位*/
}
以上 From http://blog.csdn.net/zmazon/article/details/8262185
取出最右侧的1
int quyu(
int pos){
return pos & (~
pos +
1);
}
以上 From 八皇后
求一个32位数中有几位非零位的运算
int Count32(
unsigned long Arg) {
Arg = ((Arg >>
1) &
0x55555555) + (Arg &
0x55555555);
Arg = ((Arg >>
2) &
0x33333333) + (Arg &
0x33333333);
Arg = ((Arg >>
4) &
0x0f0f0f0f) + (Arg &
0x0f0f0f0f);
Arg = ((Arg >>
8) &
0x00ff00ff) + (Arg &
0x00ff00ff);
return (Arg >>
16) + (Arg &
0x0000ffff);
}
求最低位非零位是第几位的运算
int Lsb32(
unsigned long Arg) {
int RetVal =
31;
if (Arg &
0x0000ffff) { RetVal -=
16; Arg &=
0x0000ffff; }
if (Arg &
0x00ff00ff) { RetVal -=
8; Arg &=
0x00ff00ff; }
if (Arg &
0x0f0f0f0f) { RetVal -=
4; Arg &=
0x0f0f0f0f; }
if (Arg &
0x33333333) { RetVal -=
2; Arg &=
0x33333333; }
if (Arg &
0x55555555) RetVal -=
1;
return RetVal;
}
求最高位非零位是第几位的运算
int Msb32(
unsigned long Arg) {
int RetVal =
0;
if (Arg &
0xffff0000) { RetVal +=
16; Arg &=
0xffff0000; }
if (Arg &
0xff00ff00) { RetVal +=
8; Arg &=
0xff00ff00; }
if (Arg &
0xf0f0f0f0) { RetVal +=
4; Arg &=
0xf0f0f0f0; }
if (Arg &
0xcccccccc) { RetVal +=
2; Arg &=
0xcccccccc; }
if (Arg &
0xaaaaaaaa) RetVal +=
1;
return RetVal;
}
以上 From http://www.xqbase.com/computer/struct_intro.htm