最高有效半字节的十六进制

Hex of most significant nibble

我在按位操作方面遇到了问题。

要执行的操作:x 的最高半字节的十六进制值等于 y(假设 0 <= y <= 15)

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

问题:我需要制作我的函数,以便当 msb = y 时它 returns 1,如果它不是真的 0。但是,即使我 运行 它与0xff。如果有人能指出我正确的方向,那就太好了。谢谢。

int sig_nib(int x, int y){

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

return (result ^ y);
}

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

应该这样做:

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

它使用布尔反转 (!) 重新解释按位异或的整数结果。