プログラムはなぜ動くのか
https://images-fe.ssl-images-amazon.com/images/I/51-RR1ZYgYL.jpg
読んだ時期:2020.10
読了まで半年かかっているw
ーーーーーーーーーー
CPUやメモリの実態は、多くのトランジスタから構成されたIC(Integrated Cirvuit=集積回路)と呼ばれる電子部品
レジスタ
制御装置
演算装置
クロック(メモリーのようなもの)
メモリ
命令とデータを格納する
CPUはメモリに格納されたデータを読み出したり格納したりする
1バイトずつにアドレスという番号がついている
このアドレス指定して任意のデータを読み出したりする
メイン・メモリーのデータや命令はPCの電源を切ると消える
自作PCを夏休みの工作でつくった
I/Oを直接つないだりして目で見れたの良かった
補数の考え方、負の数と浮動小数点の考え方がやっとわかった
何回聞いても忘れること→ビットは最小単位、バイトが基本単位
バイトは8桁の2進数
2の3乗 2=基数、3=重み
10進数の場合は基数が10である
シフト演算
2進数の場合、左シフトは2倍、右シフトは2分の1となる
2進数でマイナスを表す 一番左の桁を符号として扱う(=符号ビット)
0の場合はプラス、1の場合はマイナスを表す
コンピュータは引き算を内部的に足し算で行っている
そのために補数をつかう
補数について
補数を作るには、各桁を反転させて最後に1を足す
https://gyazo.com/66e96973cc3ac46ebee3fdfab506edd1
00000001 + 11111111 = 0 のワケ
8ビットの桁あふれを使っている
桁あふれになった部分は無視される
https://gyazo.com/d0bf3e846bb5d1604c6e9d95835b4875
右シフトの種類
論理右シフト
グラフィックスパターンなどを示す場合、右シフトして空いた左の桁には必ず0が入る
算術右シフト
算術右シフトの場合、もとの数値の符号を右シフトして空いた左の桁に入れる(2桁以上右シフトしても符号と同じ数値を入れる)
右シフトに関連して、符号拡張のはなし
符号拡張とは、値を変えずに桁数だけ増やすこと
1111→00001111, 1111→11111111
補数で示された数値の場合も同様
この辺り、コンピュータサイエンス履修した人には自明なんだろうけど、ちゃんと知れてよかった。