2の補数を使ってもオーバーフローは発生する
- 正の数と正の数の加算で結果が負になる場合
- 負の数と負の数の加算で結果が正になる倍
→判定はそこまで大変でない
| ビット | 10進数 | 2の補数 | 符号付き絶対値 |
|---|---|---|---|
| 000 | 0 | +0 | +0 |
| 001 | 1 | +1 | +1 |
| 010 | 2 | +2 | +2 |
| 011 | 3 | +3 | +3 |
| 100 | 4 | -4 | -0 |
| 101 | 5 | -3 | -1 |
| 110 | 6 | -2 | -2 |
| 111 | 7 | -1 | -3 |
2の補数の場合は加算だけで加減算を行うことができるが、符号付き絶対値は計算が難しい
msbは符号ビットとして扱っている
2の補数はビット反転して1を足せばいい←簡単
どうして?
とを足すと全桁1になる
→さらに1を足すとになるから、と同じことになる
符号付き絶対値は符号が同じなら絶対値を普通に加算する
符号が異なる場合はXとYの絶対値を比較して加減算し、最後に符号ビットを付けるため分岐が必要になってしまう
1の補数のほうが正負の反転は早いが、最後に1を足すのが余計なので基本的には2の補数
unsigned intとintではオーバーフローの条件が異なる→加算命令が複数種類ある場合も
大小比較などでは符号付き命令と符号なし命令を区別する必要性
符号拡張
nビットの整数をmビットにすること(m>n)
上位m-nビットは何を入れればいいのか?
→符号付き整数なら元の符号ビットと同じ値、符号なし整数なら0埋め
コンピュータにおける実数
の和で近似するのは共通
固定小数点
- 小数点の位置が固定されているとする表記法
- 整数は末尾に小数点があるとする一種の固定小数点
浮動小数点
- の形を使って固定小数点の0.0000の部分の無駄をなくす(基数は暗黙の約束としておく)
- IEEEによる国際標準規格では
- 実数をで表現
- : 符号
- : 指数部(8/11ビット)
- : 仮数部(23/52ビット)
- 127を引くことで非負の数だけでプラスもマイナスも出せるようにしている
浮動小数点を作るには
- 整数部が1になるように仮数と指数を調整(正規化)
- それぞれの値を代入
正規化するとある値は正規化によって唯一になる。また、正規化すると仮数のMSBは必ず1になるので最初の桁を仮数に含めない(けち表現)
指数部の最小値と最大値は扱いが特別になる
ならでゼロを表す表現として用いる
でなら(けち表現を使わないことによって有効桁数を犠牲に正規化数の最小値よりも小さい値まで表せるようになる、非正規化数)
が最大値なら
で
でNaN(Not a Number)
下駄をはかせている理由は整数の大小比較と同様に浮動小数点の大小比較を行うため
の順に並んでいるため、整数と同様に比較を行うことができる←すごい!
ノイマン型計算機、マイクロプロセッサ
アーキテクチャ
- 内部構成
- 命令セットアーキテクチャ
- 命令を実行する仕組み
- メモリとの接続方式
- フォンノイマンボトルネックを克服する構成
論理ゲート、製造レベルの設計を含まない
世界最古のコンピュータはENIAC(アメリカ/1946)、配線の変更によって汎用的に使えた
フォン、ノイマンがEDVACを生み出しこれがノイマン型計算機の期限(1945に構想/1951稼働)
世界初の実用的なノイマン型計算機はEDSAC(イギリス)
理論上のチューリングマシンは1936には構想されていた