给定一个16位整数,比较四位中的每一位并输出最大值

时间:2011-12-03 00:55:24

标签: binary hex bit-manipulation bit-shift

。例如0xFE10,应输出0xF(二进制1111)。

这是Qualcomm的采访问题。到目前为止,这是我的想法:

我正在调用16位整数:

int num = /*whatever the number is*/

有四位掩码:

int zeroTo4 = (num & 0x000F);  
int fiveTo5 = (num & 0x00F0) >> 4;   
int eightTo12 = (num & 0x0F00) >> 8;   
int twelveTo16 = (num & 0xF000) >> 12;   

int printbit = zeroTo4;

if( fiveTo5 > printbit )
    printbit = fiveTo5;

if( eightTo12 > printbit )
    printbit = eightTo12;

if( twelveTo16 > printbit )
    printbit = twelveTo16;

printf( "Largest bit of %X is %1X\n", num, printbit );

但是,我很确定有一种更简单,更简单的方法。谁能帮我吗?谢谢!

1 个答案:

答案 0 :(得分:0)

int max4(int j)
{
   int ret=0;
   while(j>0)
   {
        if( (j&0xf) > ret ) ret=j&0xf;
        j>>=4;
   }
   return ret;
}

有些人可能更喜欢:

int max4(int j)
{
   int ret=0;
   do if( (j&0xf) > ret ) ret=j&0xf;
   while((j>>=4)>0);
   return ret;
}