0

私の関数は 32 ビットの int を取り、その数値の偶数の位置に 1 がある場合は 0 または 1 を返す必要があります。一度に 8 ビットしかアクセスできない条件ステートメントも使用できません。

以下は入力例です: 10001000 01011101 00000000 11001110

1) ビットとビットを AA(10101010) でシフトし、それぞれを変数に格納します。

int a = 10001000
int b = 1000
int c = 0
int d = 10001010

ここで、奇数ビットが設定されていない場合は 0 を返し、設定されている場合は 1 を返す必要があります。ご覧のとおり、ありました。したがって、これらを 1 つの数値に結合してから、!! を使用する必要があります。0 または 1 を返す演算子です。ここで問題が発生します。

int valueToReturn = a | b | c | d;

今、私は言う必要があります:

return !!valueTOReturn; 

正しい値が返されないので、誰かが私に洞察を与えることができますか???

|| のような条件ステートメントは使用できません。&&

私はそれを考え出した。私が言ったことはすべて正しい答えを与えますが、変数の 1 つに対して間違った値を取得していました。助けてくれてありがとう!

4

4 に答える 4

0

bdares が言うように、それは単なる多くのビット操作です...evenbit_int要求された値に評価されます。

#define evenbit_byte(x) (((x) >> 1 | (x) >> 3 | (x) >> 5 | (x) >> 7) & 1)
#define evenbit_int(x) (evenbit_byte(x) | evenbit_byte(x >> 8) | evenbit_byte(x >> 16) | evenbit_byte(x >> 24))

またはもう少し最適化された

byte evenbits(DWORD x)
{ 
  byte a = x >> 8;    
  byte b = x >> 16;    
  byte c = x >> 24;
  return (evenbit_byte(x) | evenbit_byte(a) | evenbit_byte(b) | evenbit_byte(c))
}
于 2011-08-27T14:36:07.213 に答える
0

しかし、私が正しく理解しているかどうかはわかりません.32ビットの数値を持っている場合、0の場合にのみすべてのビットをオフにすることができます.

if(input_number == 0 )
return 0;
else 
return 1;
于 2011-08-27T13:58:36.593 に答える
0

条件を使用できない場合は、これを醜い方法で行う必要があります。各偶数インデックス ビットのビットを取得し、それらの OR を返します。マスクをスキップできます。これはちょっとばかげていますが、下手な宿題の匂いがします。

間違った最初の部分を削除するために私の答えを編集しました。

論理については arnaud576875 が正しいようです。演算子: http://www.gnu.org/s/gnu-c-manual/gnu-c-manual.html#The-Logical-Negation-Operator

誰かが C99 仕様のリファレンス (GNU 実装はそれから逸脱している可能性があります) を見つけるまで、確かなことはわからないと思いますが、あなたの C のバージョンは前述のとおりであると思われます。

于 2011-08-27T13:59:57.800 に答える
0

まず第一に、あなたが考えているようにビットを保存していません。

int a = 10001000

実際には 10,001,000 です (バイナリでは b100110001001101001101000)。

関数は 32 ビット整数を受け取ると言うので、できることは、次のように 8 ビット部分をそれぞれ抽出することです。

unsigned char a, b, c, d;
a = (unsigned char)(input & 0xff);
b = (unsigned char)((input >> 8) & 0xff);
c = (unsigned char)((input >> 16) & 0xff);
d = (unsigned char)((input >> 24) & 0xff);

これで、マスキング/テスト操作を実行できます。

return (0xAA & a) | (0xAA & b) | (0xAA & c) | (0xAA & d);
于 2011-08-27T14:29:28.137 に答える