C言語講習会3
- 7. 関数[復習]
• 実は,変数には主に2種類ある
• ローカル変数
• グローバル変数
• ローカル変数は,関数の内部
で宣言,定義される変数
• 宣言した関数内でしか参照できな
い
• 先ほど紹介したadd関数の変数a,b
も,今までmain関数内で定義し
た変数もすべてローカル変数
• 関数が終了すると,メモリが消滅
するので値が保存されない
• 変数は定義しないと使えない
ので,関数の最初で通常定義
する
- 15. 配列再び
• 配列にも初期化する方法があり、
int hoge[] = {2,4,6};
• とすると、値が初期化された要素数3の配列が
できる
• この例はint hoge[3];として、hoge[0] = 2;hoge[1] = 4;
hoge[2] = 6;としたのと同じ
• []内に要素数を書かなくても良い
• 宣言時にしか初期化できない
- 19. 文字列と配列[応用]
• 文字列 = 文字の配列なので、下のように書き換
えることもできる
• hello[0] = ‘H’ ,hello[1] = ‘e’といった具合
• 一番右の’¥0’は、ヌル文字と呼ばれ、文字列の終
端を表す記号
• このヌル文字を使って、文字列の終端を検知する場合が多い
- 28. ビット演算(の前に)
• C言語ではなく,一般的な話
• bit(ビット)とbyte(バイト)について
• bit(ビット)とは0と1によるデータの単位のこと
• 1bitで0と1の2種類のデータが表現できる
• binary digitの略らしい
• 1byteは8bitであるのが一般的
• 1byteで2^8=256種類のデータを表現できる
• 1KB = 1024B(byte)
• 基本的にコンピュータの内部では,データは2進
数,つまりbit単位で扱われる
• 001010111101011010010001110…
- 35. ビット演算
• OR演算子( | )は各桁のビット
に対して次の演算を行う
– ||と間違えないように
• 0 | 0 = 0
• 0 | 1 = 1
• 1 | 0 = 1
• 1 | 1 = 1
- 42. おまけ
• 先ほどprintf()内で%xを用い
て変数を16進数表示した
– %dは変数を10進で表示するもの
だった
– このような表示形式を指定する
ものをフォーマット指定子とい
う
– 代表例は右に掲載
• 他にも,小数点の桁数を指定
する方法や左詰/右詰,0埋め
など色々なことをprintf内で
指定できる
– 使い方はググって
指
定
子
対応する型 説明
%c char 1文字を出力
%s char *
char []
文字列を出力
%d int,short 整数を10進数
で出力
%u unsigned int
unsigned short
符号なし整数
を10進で出力
%o (整数値を扱え
る型)
整数を8進数で
出力
%x (整数値を扱え
る型)
整数を16進数
で出力
%f float 実数を出力
%lf double 倍精度実数を
出力
- 44. おまけ[応用]
• 先ほどの表でa = -1のときの
~aは0だった
– 0をビットで表すと
00000…00000
– だとすると-1は
11111…11111???
– そもそも負の数を2進数でどう
表すの?
• unsignedなどの指定がない場
合は,2進数の最上位ビット
(1番左)で正負を判断している
– 詳しくは2の補数でググろう
char binary
+127 01111111
+126 01111110
…
+2 00000010
+1 00000001
0 00000000
-1 11111111
-2 11111110
…
-127 10000001
-128 10000000
- 45. おまけ[応用]
• 2の補数表現の利点は,減算
を加算で行えること
– たとえば,1-1をしたい
– 1-1 = 1 + (-1)
– すると,1 00000000となるが,char
型は8ビットなので最上位の1は捨て
られる
– よって答えは00000000となる
• 右ビットシフト演算子(>>)をした
場合の空白に何が入るかは処理系
依存.
– 一般的には符号あり=>最上位ビット
,符号なし=>0が埋められる
– 処理系によってはいきなり負の数が正
になったり?
char binary
+127 01111111
+126 01111110
…
+2 00000010
+1 00000001
0 00000000
-1 11111111
-2 11111110
…
-127 10000001
-128 10000000
- 51. プリプロセッサについてちょっと
• #define (A) (B)
• と書くことで,(A)がすべ
て(B)に置き換わる
– マクロという
– 右の例だとNUMはプリプロ
セッサによって10になる
– (B)に当たる部分は省略可
– #defineを用いると簡単な関
数のようなものが(作ろうと
思えば)作れる