はじめに
CSAPPのdata labを全て解いたので、その感想を記事にしています。
これから解こうという人の参考になればと思っています。
CSAPPについて
CSAPPとは、「Computer Systems: A Programmer's Perspective」という本のことです。
この本は、カーネギーメロン大学の講義をもとに、コンピュータのアーキテクチャについて説明しています。
日本語版も発売されています。
teach yourself computer scienceというサイトで、コンピュータアーキテクチャの教科書としておすすめされています。
CSAPPの特徴は、下記です。
- 分厚い
- すべての練習問題の解答が書いてある
- HPにLab(演習)や、本に書いてあるコード、関連する記事のリンクが記載されている
- ハードウェアを作る観点ではなく、利用する側(プログラマ)の観点で書いている
Data Labについて
Data Labは、使える演算子を制限されたうえで、指定された関数を実装します。
実装する関数の例は、下記の通りです。
- 数値の絶対値を求める
- 2の補数の最小値を求める
なおData LabではC言語を使用します。
感想
Data Labの難易度は高めだと感じました。
簡単な問題もありますが、多くは解法を思いつかないと、どうしようもない問題です。
そのため、ペンと紙を片手に、うんうんと頭をひねることになります。
解くために必要な知識
解くために必要な知識は、比較的少なめです。
- C言語のビット演算子(&, |, ^, ~, <<, >>)の使い方
- C言語の論理演算子(!)の使い方
-
!xはxが0なら1、0以外なら0 -
!!xはxが0なら0、0以外なら1
-
- 特定のビットを立てたいなら、
value | mask- maskは立てたい位置のビットを1にする
- 最上位ビットだけを立てたいなら、
1 << 桁数 - 1- 例:32bitなら
1 << 31
- 例:32bitなら
- 最上位ビットを全体のビットにコピーしたいまら、
x >> 桁数 - 1- 例:32bitなら
x>>31
- 例:32bitなら
- ド・モルガンの法則
※ CSAPPに書いてある内容(例:浮動小数点をどうビットで表すか)は省いています