1. ホーム
  2. c

[解決済み] sarqとshrqの違いについて【重複

2022-02-11 05:21:33

質問

名称 値

rdi: 0x6

ラックス: 0x4

sarqとshrqの違いは何ですか?

sarq $1, %rdi とした場合、この値はどのように見えるでしょうか? shrq %rdi は何をするのですか?

どのように解決するのですか?

sarq はクアッドワードの算術右シフト、そして shrq はクアッドワードの論理右シフトです。算術シフトは空いたビットを左端のビット(別名、符号ビット)で埋めるのに対し、論理右シフトは0だけで埋めるという違いがあります。

正の数の場合、両者の動作は同じです。負の数では、その動作は全く異なります。

例えば、以下のように仮定します。 %rax = 16 (0x0000 0000 0000 0010) . どちらも sar $4, %raxshrq $4, %rax を設定します。 %rax を 1 にする ( 0x0000 0000 0000 0001 ).

では、もし %rax = -16 (0xffff ffff ffff fff0) . sar $4, %rax を設定します。 %rax を-1する( 0xffff ffff ffff ffff ) の間 shr $4, %rax を設定します。 %rax を1152921504606846975に変換します( 0x0fff ffff ffff ffff ).

どの命令を使うかは、データ型とやりたいことによります。例えば、C >> 演算子は sar は符号付きデータ型に shr は符号なしを表す。