! & ^ ~ やシフトなどのビット単位の演算子のみを使用して、数値 (a/(2**b) を計算する必要があります。次のヒントが与えられましたが、C は初めてで、コードの意味がわかりません。
int bias = x>0 ? 0 : ((1<<n)-1);
誰かが私にそれを説明できますか?
a>>b は機能すると思いましたが、負の数では機能しないと思います。
xが正の場合、その特定のコードビットは0のバイアスを与えます。それ以外の場合は、下位 n ビットのマスクを生成します。このx = a ? b : c;
パターンは、C では三項演算子(技術的には「条件演算子」のようです)と呼ばれます。
n (1<<n) (1<<n)-1 binary
0 0x01 0x00 00000000
1 0x02 0x01 00000001
2 0x04 0x03 00000011
3 0x08 0x07 00000111
4 0x10 0x0F 00001111
5 0x20 0x1F 00011111
6 0x40 0x3F 00111111
7 0x80 0x7F 01111111
...
まあ、x<<n
正の数に対して正しく機能します。それでは、次のようなものを使用しないでください
result=if sign=1 then (x<<n) else(-x<<n)
(iftehenelseを符号ビットでマスキングして置き換えます)
はぁ…これは宿題の質問です。学生は、プログラマーの視点の教科書であるコンピューター システムの課題について助けを求めています。
今後の参考として、誰かが「何かをするために XYZ 演算子のみを使用することを許可されている」と言うときはいつでも、それはおそらく宿題の質問です。
宿題の質問で助けを求める人々から評判を奪う方法はないと思いますよね?