算術シフト中は、数値の符号ビットを変更せずに維持し、値の大きさを変更する必要があります。1 ビットを左にシフトすることは数値を 2 で乗算することと同等であり、1 ビットを右にシフトすることは数値を 2 で割ることと同等です。
シフト演算には算術シフト、論理シフト、循環シフトの 3 種類があり、それぞれ左シフトと右シフトに分けられます。
1. 算術シフト
算術シフトの対象は符号付き数値であり、シフト処理中はオペランドの符号を変更しない必要があります。1 ビットを左にシフトするときにオーバーフローがなければ、値は 2 倍され、1 ビットを右にシフトする場合は、
1.1 オリジナルのコードシフトルール
正負に関係なく、左または右にシフトすると、符号ビットは変更されず、空いている位置はすべて「0」で埋められます。
負の数のソース コードをシフトする前と後の結果は次のとおりです。
左シフト: シフトが開始される前
シフトの後には、
右シフト: シフトが開始される前
シフトの後には、
1.2 補数コードシフト規則
(1) 正の数
符号ビットは左シフトまたは右シフトに関係なく変更されず、空いた位置は「0」で埋められます。
(2) 負の数
左シフト: シフトが開始される前
シフトの後には、
右にシフト: シフトが完了する前
シフトの後には、
2. 論理シフト
論理シフトの対象は符号なしの数値であるため、シフト時に符号を考慮する必要はありません。
論理が左にシフトされると、上位ビットが失われ、下位ビットが「0」で埋められ、論理が右にシフトすると、下位ビットが失われ、上位ビットが「0」で埋められます。 」。
3. サイクリックシフト
巡回シフトは、キャリービットを伴うシフトの有無により、キャリービットを持たない小サイクルと、キャリービットを伴う大サイクルの2種類に分けられます。