0

我在按位操作时遇到问题。

要做的事情: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);
}
4

1 回答 1

2

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

这样的事情应该这样做:

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

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

于 2015-01-23T10:46:35.820 回答