十六进制最重要的半字节

时间:2015-01-23 10:39:57

标签: c byte bit-manipulation bit nibble

我在按位操作方面遇到麻烦。

待办事项:x的最高有效半字节的十六进制值等于y(假设0 <= y <= 15)

限制:不得使用相等(==)或不等(!=)测试,相对比较运算符,除法,模数和乘法,条件。

问题:我需要创建我的函数,以便当msb = y时它返回1并且如果它不是真的0.但是,即使我用0xff运行它,我仍然保持为零。如果有人能指出我正确的方向,这将是伟大的。谢谢。

int sig_nib(int x, int y){

int shifright = x  >> 27;
int result = shifright & y;

return (result ^ y);
}

1 个答案:

答案 0 :(得分:2)

愚蠢的限制。谁破坏了你的编译器?

这样的事情应该这样做:

bool sig_nib(int x, int y)
{
  const int top4 = (x >> 28) & 0xf;
  return !(top4 ^ y);
}

它使用布尔反转(!)来重新解释bitwise-xor的整数结果。