C言語の変数とデータ型

### 変数の宣言
int a, b;
a = 10;
a = 20 + 30; // a=50
b = a; // b=50
b = a + 100; // b=150
b = b + 200; // b=350;
※const変数は値を参照できるが変更はできない

### データ型
char(1byte): -128〜127
unsigned char(1byte): 0〜255
int(4byte): -2147483648〜2147483648
unsigned int(4byte): 0〜4294967295
short int(2byte): -32768〜32767
unsigned short int(2byte): 0〜65535
long int(4byte): -214783648〜214783647
unsigned long int(4byte): 0〜4294967295
float(4byte): 10^-37〜10^38
double(8byte): 10^-307〜10^308
long double: doubleと同じかそれより大きい
※バイトはメモリ内に確保されるメモリサイズ
※unsignedはマイナスの符号なしのデータ表現
※signed, unsigned, short, longが先行する場合はintを省略できる
※初級ではint, char, doubleがよく使用される

int main(void){
	printf("%d\n", sizeof(char));
	printf("%d\n", sizeof(int));
	return 0;
}

$ ./dev
1
4

### データ型の性格
– char型は1byteだが、int型は4byte, char型の配列を文字列型と称することがある
– double, floatなどの浮動小数点の値をint型に入れようとすると、小数点以下が切り離される ※四捨五入はなし

### 整数値のオーバーフロー
2147483647に、1をプラスすると、オーバーフローして、-2147483648になる。

int main(void){
	int a;
	a = 2147483647;
	a = a + 3;
	printf("%d\n", a);
	return 0;
}

### floatとdoubleの使い分け
浮動小数点数は通常double型が使われる。sin, cos, tanなどは全てdouble型を返す
floatは、大量のfloat型データを使用する際など、メモリ領域を節約したい時に有効

### 配列
int dt[10];
dt[10] = 100; // 不正、dt[10]はdt[0]〜dt[9]

### 多次元配列
int a[2][3]; // 二次元配列、配列長3の配列を2組用意した構成
int b[5][6][7]; // 三次元配列
※二次元配列以外を使うのは稀

int main(void){
	int dt[3][5];

	dt[0][0] = 11;
	dt[1][3] = 55;
	dt[2][4] = 66;

	printf("%d\n", dt[0][0]);
	printf("%d\n", dt[1][3]);
	printf("%d\n", dt[2][4]);
	return 0;
}

多次元配列や行列には慣れないといけませんね。