0

ビット操作で困っています。

行うこと: x の最上位ニブルの 16 進値が 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);
}

ブール反転 ( !) を使用して、ビットごとの xor からの整数の結果を再解釈します。

于 2015-01-23T10:46:35.820 に答える