2011-12-03 39 views
0

。例如0xFE10,应输出0xF(1111二进制)。给定一个16位整数,比较每个四位并输出最大值

这是一个高通面试问题。这是迄今为止我的想法:

我打电话的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); 

不过,我敢肯定有一个简单,更简单的方法来做到这一点谁能帮我吗?谢谢!

回答

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; 
} 
+0

由于'int'是一个符号量,这将失败,如果'Ĵ<0'。 –

+0

这可能是一个无限循环.. – harold

+0

不能通过改变while条件从'j> 0'到'while(j!= 0)'来解决那个角落的情况吗? – lordmarinara

相关问题