試験の準備をしていて、この質問に行き詰まりました。許可された演算子は<<,+,&
、ループが許可されておらず、最小一時変数です。4ビットの数値(char)を取得し、ミラーリングされた(中央に対して)ビットを返す関数をCで記述します。例:与えられたb4,b3,b2,b1
リターンb1,b2,b3,b4
O_oありがとう!
明確ではないかもしれませんが、一般的な言語ツールは許可されています('=='、if、>、<など)。
試験の準備をしていて、この質問に行き詰まりました。許可された演算子は<<,+,&
、ループが許可されておらず、最小一時変数です。4ビットの数値(char)を取得し、ミラーリングされた(中央に対して)ビットを返す関数をCで記述します。例:与えられたb4,b3,b2,b1
リターンb1,b2,b3,b4
O_oありがとう!
明確ではないかもしれませんが、一般的な言語ツールは許可されています('=='、if、>、<など)。
これは、演算子のみの制約と<<, +, &
return以外の他の構造がないため、不可能です。
b3を3番目の位置から2番目の位置に移動するには、右にシフトする方法が必要です。これには、>>または/のようなものが必要です。提供されている演算子のうち、2番目または1番目のビット位置を設定するためにb3で使用できる演算子はありません。
if文と代入演算子を使えば=
可能です。次に、次のような厄介なソリューションを書くことができます
char flip(char c)
{
char f;
f = (c & 1) << 3 + (c & 2) << 1;
if (c & 4)
f = f + 2;
if (c & 8)
f = f + 1;
return f;
}
if
?
同様の演算子を使用できる場合は、より醜いが短い1つのライナー。
char flip(char c)
{
return (c & 1) << 3 + (c & 2) << 1 + ((c & 4) ? 2 : 0) + ((c & 8) ? 1 : 0);
}