符号あり右シフト
符号あり整数の右シフト動作は一定していません。
まず正の数の右シフトは左から0がシフトインされます。
負の数の場合は、ANSI Cでは規定していません。
処理系に依存するという事になっています。
その動作には2種類あります。
算術シフトは、算術計算に耐えるシフトを意味しています。
例えば-1000を右1ビットシフトしたら-500になるべきだというシフトです。
これに対して論理シフトは、
とにかく指定数だけシフトすればいいというシフトです。
負の数を右にシフトして、結果が正の数になっても構わないというものです。
このように右シフトには2つの方法がありますが、
実際には算術シフトをとっている処理系が大部分です。
それはシフト演算と算術演算とに一貫性がでてくるからです。
このようにシフト演算には処理系依存という要素がありますから
実際の運用にあたっては、
シフト処理は符号無し整数に対して行う
という姿勢が望ましいと言えます。
まず正の数の右シフトは左から0がシフトインされます。
負の数の場合は、ANSI Cでは規定していません。
処理系に依存するという事になっています。
その動作には2種類あります。
(1)符号ビットのコピーをシフトインする(算術シフト)
(2)0をシフトインする(論理シフト)
算術シフトは、算術計算に耐えるシフトを意味しています。
例えば-1000を右1ビットシフトしたら-500になるべきだというシフトです。
これに対して論理シフトは、
とにかく指定数だけシフトすればいいというシフトです。
負の数を右にシフトして、結果が正の数になっても構わないというものです。
このように右シフトには2つの方法がありますが、
実際には算術シフトをとっている処理系が大部分です。
それはシフト演算と算術演算とに一貫性がでてくるからです。
このようにシフト演算には処理系依存という要素がありますから
実際の運用にあたっては、
シフト処理は符号無し整数に対して行う
という姿勢が望ましいと言えます。
Comments