- 论坛徽章:
- 0
|
不用判断语句,求两个数的最大值
原帖由 "yuxh" 发表:
不是最高的一位,而是把m变成:0...0100X...X这样的形式,即1后面有两个0
于是当x在该位上为1时:
(x & m) + m / 2 >;=0...0100...0 + 0...0010...0 = 0...0110...0 >;=m
(x & m) + m / 2) <= 0...01001............
也没必要这样,如果能有一个函数返回 m 的第一个为 1 的位置,那么问题不就很简单了?假设 m 的第 i 位是 1,那么( ( x & ( 1 << i ) ) >;>; i ) & x 就代表 x 是否在该位上为 1。
int bit( int v, int i )
{
return ( v & (1 << i) ) >;>; i ;
}
int first_one( int x )
{
int i,j,ret;
i = 0;
ret = 0;
for( j=31; j>;=0; j-- ){
ret |= bit(x,j) & (!ret);
i += (!ret);
}
i = 31 - i;
return i;
} |
|