Binary 给定一个16位整数,比较四位中的每一位并输出最大值

Binary 给定一个16位整数,比较四位中的每一位并输出最大值,binary,hex,bit-manipulation,bit-shift,Binary,Hex,Bit Manipulation,Bit Shift,。e、 g.0xFE10,应输出0xF(二进制1111) 这是高通公司的采访问题。到目前为止,这是我的想法: 我调用16位整数: int num = /*whatever the number is*/ 具有四位掩码: int zeroTo4 = (num & 0x000F); int fiveTo5 = (num & 0x00F0) >> 4; int eightTo12 = (num & 0x0F00) >> 8; int t

。e、 g.0xFE10,应输出0xF(二进制1111)

这是高通公司的采访问题。到目前为止,这是我的想法:

我调用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 );
然而,我很确定有一个更简单更容易的方法来做到这一点。有人能帮我吗?谢谢

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

由于
int
是一个有符号的数量,如果
j<0
,这将失败。难道不能通过将while条件从
j>0
更改为
while(j!=0)
?@lordmarinara:不一定,因为右移有符号的数量会对扩展进行符号化,我想我可以做相反的逻辑:
intret=0;(j!=0){if((j&0xF000)>ret)ret=j&0xF000;j 12)&0x000F;
如果我没记错的话,左狗屎在移位时不会保留符号位。我们假设输入是16位整数。因此,当用32位表示时,它不能小于零。