今、私は本Computer Systems : Programmer Perspective を読んでいます。
本の 1 つの問題は、符号付き整数に対して論理右シフトを実行すると述べていますが、これを開始する方法がわかりません。
以下は、本からの実際の質問です。
次の C 関数のコードを入力します。
関数
srl
は、算術右シフト ( value で指定xsra
) を使用して論理右シフトを実行し、その後に右シフトや除算を含まない他の演算を実行します。関数
sra
は、論理右シフト ( value で指定xsrl
) を使用して算術右シフトを実行し、その後に右シフトや除算を含まない他の演算を実行します。この計算を使用して、データ型のビット数
8*sizeof(int)
を決定できます。シフト量の範囲は~です。w
int
k
0
w − 1
unsigned srl(unsigned x, int k) { /* Perform shift arithmetically */ unsigned xsra = (int) x >> k; . . . } int sra(int x, int k) { /* Perform shift logically */ int xsrl = (unsigned) x >> k; . . . }
質問を理解していただければ幸いです。