C言語[完全]入門 2022 メモ08
C言語の勉強に良いかと思い「C言語[完全]入門・松浦健一郎 (著), 司 ゆき (著)」を購入しました。
問題があった部分やつまずいた部分での解決方法を、覚書として残しておきたいと思います。
私の行動としてはWindows11とmacOS13です。主にWindows11で操作をしていますが、macでの学習も必要だと感じる場合は、両方を覚書として残しておきたいと考えています。
このメモは、「Chapter5 section01」の覚書になります。
ブログ内リンク
『C言語[完全]入門』関連リンク
- 『C言語[完全]入門』サンプルファイル
- https://www.sbcr.jp/support/4815610049/
- ひぐぺん工房(松浦健一郎・司ゆき) - HigPen Works
変数宣言
- 変数とはデータを格納しておく領域のことです。
- 型 変数名;
- 型 変数名A, 型 変数名B;
- 型:int(整数型) , double ( 倍精度浮動小数点型)など
- 変数:C言語において、変数(へんすう、variable)とは、処理を行うために必要なデータを記憶しておく領域に名前をつけたものを意味します。名前がついているので、たくさんの種類のデータを扱う場合でも、簡単に区別がつきます。
- 参考:C言語の変数について
識別子
- "識別子" または "シンボル" は、プログラム内の変数、型、関数、およびラベルに対して指定する名前です。 識別子名は、どのキーワードともスペル (大文字小文字の区別を含む) が異なっている必要があります。
- 参考:C 識別子 | Microsoft Learn
\・¥
- cd \Users\ユーザー名\Desktop
- cd \users\ユーザー名\desktop
- \・¥はWindows11のコマンドプロントでは同じ
Macにおけるバックスラッシュ(\)の入力方法
- optionキーを押しながら、¥キーを押す。(macOS 13.2.1)
limits.h
- 整数型の最小値、最大値や文字型に関するマクロが定義されています。
- 関数は定義されていません。
- 参考:[C言語 標準ライブラリ] limits.hの使い方 - コッコ隊長の勉強部屋
CHAR_BIT
- バイトのビット数を表す。
- 1バイトのビット数。最低でも 8 であるが、具体的な値は環境依存。
- 参考:CHAR_BIT | Programming Place Plus C言語編 標準ライブラリのリファレンス
論理シフト・算術シフト
- 論理シフトとは、「符号を考慮しない」シフト演算のことです。2進数のビット列を左や右にずらすことで、掛け算や割り算ができます。ビットをずらすとビットの列からあふれ出てしまった分のビットは捨てられます。空いたビットは「0」で埋めます。
- 算術シフトは「符号を考慮」します。符号は一番左にあるビットを使います。一番左のビットが1のときは、「負の数」になります。算術シフトを行う時は符号を表しているビットは動かさずに、他のビット列の範囲を左か右にずらします。左か右によって、空いたビットの埋め方が異なります。
- 参考:シフト演算とは?論理シフトと算術シフトの違いを調べよう! - ITの学び
2の補数
- 2の補数とは、基数(2進数)の補数(足すと桁が1つ上がる数のうち最も小さい数)のことです。
- 参考:2の補数を分かりやすく解説 - ITを分かりやすく解説
負数・非負数
- 負数:数学で、零より小さい数。負の数。マイナスの数。⇔正数。
- 非負:(数学) 負の値でないこと。(数学) 負の値を含まない数学的対象。
- 参考:非負 - ウィクショナリー日本語版
2進数・8進数・16進数
C言語メモリ・レジスタ・アドレス
- メモリ:番号付きの区画が並んだ棚のような物。古い値は新しい値で上書きする。メモリ上の値は除去せずコピーするので、値は残る。
- アドレス:区画の番号は、「どの区画に値を格納するか」を指定するために使います。この番号のことをアドレス(番地)と呼びます。一般的に16進数で表します。
- レジスタ:関数内である変数が頻繁に参照されることがしばしばあります。例えば、グラフィックスなどの大きな情報を繰り返し文で制御する場合で、処理するべきピクセルの変換に用いられるパラメータを保存する変数は頻繁にアクセスされることになります。このように、一定の時間内で数千、数万回の参照が予想される変数は、少しでも高速なメモリに保存するべきであると考えられます。 そこで、C言語ではこのような変数をレジスタ変数として宣言することができます。レジスタ変数とは、コンピュータの内部で最も高速なレジスタと呼ばれる CPU 内の記憶領域に情報を保存することを表します。
- 参考:読本C/7.11 レジスタ変数 - WisdomSoft
16進数の12345678は(4バイト)は、12,34,56,78の1バイトに分けて
- コンピュータのbit(ビット)byte(バイト)とは?:「bit(ビット)」…コンピュータで扱う最小単位。0と1の2進数で表される。略してb 「byte(バイト)」…bitを8つにまとめたデータ単位。「1byte=8bit」 略してB
- 参考:【基礎知識】コンピュータのbit(ビット)byte(バイト)とは?わかりやすく解説
- 16進数:4ビットの2進数が表す数値は 0 = 0000から 15 = 1111である.この数値を 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f で表すと, 4ビットを一文字で表すことができ, すなわち1バイト(=8ビット)を2文字で表すことができる. これが16進数表示である.
- 参考:整数型とビット操作
- 参考:16進数
- 参考:コンピュータで数字はこう扱う、「ビット」と「バイト」を再確認 | 日経クロステック(xTECH)
- 16進数-12345678:10進数-305419896:8進数-2215053170:2進数-10010001101000101011001111000(1,0010,0011,0100,0101,0110,0111,1000)
int型、double型
- int型:変数は4バイト(32ビット)
- double型:変数は8バイト(42ビット)
機械語
- 機械語とは、コンピュータのプロセッサが実行可能な命令のデータです。 機械語はマシン語とも言い、その名の通り、コンピュータが読むための言語です。そのため人間が読むには非常に難しいです。実際0と1の二進数のバイナリデータで表されているので、人間には数字の羅列にしか見えず読むことができません
- 参考:機械語 – プログラミング用語解説|Unity高校&ゲームスクールのG学院
アセンブリ言語
- コンピューターの動作を制御するためには、CPUに命令を送ります。そしてCPUが理解するのは「機械語」と呼ばれる言語で、2進数と呼ばれ「0」と「1」の数字だけでできた羅列です。この機械語は人が理解することはできませんが、人が理解しやすいようにしたものが「アセンブリ言語」です。機械語に1対1で対応して文字にしたプログラミング言語で、機械語にとても近い言語と言えます。アセンブリ言語の「アセンブリ」とは、「組み立て」の意味を持つ英語の「assembly」に由来するのは、そんな理由があるのかもしれません。
- 参考:【入門】アセンブリ言語とは?意味やポイントを解説 | IT・移動体通信エンジニアの派遣求人はブレーンゲート
Cコンパイラ
- Cコンパイラ (C Compiler)とは、C言語のソースファイルを実行可能なオブジェクトに変換するためのプログラムです。Windows, Linux, Mac 、いずれの環境でも簡単に無償のC言語のコンパイラを入手することもできます。
- 参考:Cコンパイラ - C言語入門
メモリ
- メモリは番号付き区画が並んだ棚のようなものです。区画の番号のことをアドレス(番地)と呼びます。
- int型の変数は4バイト(32ビット)
- double型の変数は8バイト(64ビット)
- Cコンパイラはメモリの管理をしてくれるので、メモリのアドレスを覚える必要が無い。
レジスタ
- レジスタというのは、CPUの内部にある高速で小容量の記憶装置です。
宣言と定義の違い
- 宣言:識別子を導入します。プログラムに対して「・・・という識別子があり、・・・のような性質を持つ」という情報を与えます。
- 定義:識別子を導入するとともに、その識別子に関する全ての情報を与えます。定義は宣言を兼ねているので、宣言の一種だといえます。
有効範囲
- スコープ:宣言の位置から関数の末尾までです。
- ブロック:宣言や文を{}(波括弧)で囲んだ物です。ブロックは複分(ふくぶん)とも呼ばれます。
- ネスト:ブロックなどを入れ子にすることを指します。