Учитывая 16-битное целое число, сравните каждый из четырех битов и выведите максимальный - PullRequest
0 голосов
/ 03 декабря 2011

.например, 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 голосов
/ 03 декабря 2011
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;
}
...