。例如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 );
但是,我很确定有一种更简单,更简单的方法。谁能帮我吗?谢谢!
答案 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;
}