符号付き数値のシフト演算

算術シフト中は、数値の符号ビットを変更せずに維持し、値の大きさを変更する必要があります。1 ビットを左にシフトすることは数値を 2 で乗算することと同等であり、1 ビットを右にシフトすることは数値を 2 で割ることと同等です。

シフト演算には算術シフト、論理シフト、循環シフトの 3 種類があり、それぞれ左シフトと右シフトに分けられます。

 

1. 算術シフト

算術シフトの対象は符号付き数値であり、シフト処理中はオペランドの符号を変更しない必要があります。1 ビットを左にシフトするときにオーバーフローがなければ、値は 2 倍され、1 ビットを右にシフトする場合は、

1.1 オリジナルのコードシフトルール

正負に関係なく、左または右にシフトすると、符号ビットは変更されず、空いている位置はすべて「0」で埋められます。

負の数のソース コードをシフトする前と後の結果は次のとおりです。

左シフト: シフトが開始される前   1 X_1X_2...X_{n-1}X_{n}

           シフトの後には、   1 X_2X_3...X_{n}0           

右シフト: シフトが開始される前   1 X_1X_2...X_{n-1}X_{n}

           シフトの後には、   10X_1...X_{n-2}X_{n-1}

1.2 補数コードシフト規則

(1) 正の数

符号ビットは左シフトまたは右シフトに関係なく変更されず、空いた位置は「0」で埋められます。

(2) 負の数

 左シフト: シフトが開始される前   1 X_1X_2...X_{n-1}X_{n}

            シフトの後には、   1 X_2X_3...X_{n}0           

右にシフト: シフトが完了する前   1 X_1X_2...X_{n-1}X_{n}

            シフトの後には、   11X_1X_2...X_{n-2}X_{n-1}

2. 論理シフト

論理シフトの対象は符号なしの数値であるため、シフト時に符号を考慮する必要はありません。

論理が左にシフトされると、上位ビットが失われ、下位ビットが「0」で埋められ、論理が右にシフトすると、下位ビットが失われ、上位ビットが「0」で埋められます。 」。

3. サイクリックシフト

巡回シフトは、キャリービットを伴うシフトの有無により、キャリービットを持たない小サイクルと、キャリービットを伴う大サイクルの2種類に分けられます。

おすすめ

転載: blog.csdn.net/qq_59109986/article/details/127816613