2011-12-03 3 views
0

。例えば0xFE10は、0xF(バイナリで1111)を出力するはずです。16ビット整数が与えられた場合、4ビットのそれぞれを比較し、最大値を出力します

これはクアルコムのインタビューの質問です。これは、これまでのところ、私の考えです:

私は16ビット整数を呼び出しています:

int num = /*whatever the number is*/ 

は、4ビットマスクを持っている:

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'署名された量であるので、 '' jが<0 'の場合、これは失敗します。 –

+0

これは無限ループになる可能性があります。 – harold

+0

while条件を 'j> 0'から' while(j!= 0) 'に変更することでコーナーケースを解決できませんでしたか? – lordmarinara

関連する問題