2011-12-03 74 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

相關問題