符号拡張のソースを表示
←
符号拡張
移動先:
案内
、
検索
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
要求した操作を行うことは許可されていません。
このページのソースの閲覧やコピーができます。
'''符号拡張'''(ふごうかくちょう、''Sign extension'')とは、符号付の数値を表現する[[ビット]]列が格納領域のビット幅より短い場合に、隙間を適切に埋めることによって数値としての同一性を維持する手法である。 例えば、8ビットの (-10)<sub>10</sub> という値は[[2の補数]]表現では以下のようになる。 11110110 これを16ビットに符号拡張すると以下のようになる。 11111111 11110110 符号拡張しないで16ビットの領域に格納した場合、以下のようになる 00000000 11110110 これを整数として解釈すると (246)<sub>10</sub> となってしまい、数値としての同一性が維持されない。 符号拡張にはしばしば[[マイクロプロセッサ]]や[[コンパイラ]]の[[バグ]]が隠れていることがある。 == ビットシフトでの符号拡張 == [[ビット演算#ビットシフト|算術ビットシフト]]で右シフトを行う場合、[[最上位桁ビット|MSB]]が空く。 これを符号拡張で埋める。 == ロード命令での符号拡張 == たとえば、32ビットの[[CPU]]で、[[レジスタ (コンピュータ)|レジスタ]]の長さはたいていの場合32ビットである。 メモリから32ビットより小さい幅のデータをロードする場合、レジスタの内容の一部だけがロードしたデータに置き換わる。 このデータが符号付整数であった場合、その後の演算をするには符号拡張を行う必要がある。 このため、一般的な[[マイクロプロセッサ]]では、符号拡張付きのロード命令と符号拡張のないロード命令を用意している。 そして、符号拡張のないロード命令ではレジスタ上の空いているビット列は全部 0 にすることが多い。 <!-- ホントか? いろいろなプロセッサの命令セットを知っているわけではないので、例外を知っている人がいたら加筆お願いします。 --> == イミディエート値の符号拡張 == マイクロプロセッサの命令セットには、命令ワード内に直接書かれた値を算術演算などに使用する命令がある場合がある。 これをイミディエート値または即値というが、この数値はレジスタのビット幅より小さいことが多い。 イミディエート値とレジスタの内容を符号付整数として解釈して加算などを行う場合、プロセッサは[[実行ユニット]]内部でイミディエート値を符号拡張する。 ただし、この場合も一般的に符号拡張する命令と符号拡張しない命令が存在することが多いので注意が必要である。 == x86 での符号拡張 == [[x86]]系の[[マイクロプロセッサ]]では、符号拡張は <tt>cbw</tt>, <tt>cwd</tt>, <tt>cwde</tt>, <tt>cdq</tt> という命令で行われる(例えば <tt>cbw</tt> は "convert byte to word")。 == 参考文献 == * Mano, Morris M.; Kime, Charles R. (2004). ''Logic and Computer Design Fundamentals'' (3rd ed.), pp 453. Pearson Prentice Hall. ISBN 0-13-140539-X. == 関連項目 == * [[符号付数値表現]] * [[ビット演算]] [[Category:コンピュータの算術|ふこうかくちょう]] [[de:Zweierkomplement#Vorzeichenerweiterung]]
符号拡張
に戻る。
案内メニュー
個人用ツール
ログイン
名前空間
ページ
議論
変種
表示
閲覧
ソースを表示
履歴表示
その他
検索
案内
メインページ
コミュニティ・ポータル
最近の出来事
新しいページ
最近の更新
おまかせ表示
sandbox
commonsupload
ヘルプ
ヘルプ
井戸端
notice
bugreportspage
sitesupport
ウィキペディアに関するお問い合わせ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報