データ型(整数)char,short,int,long
データ型とは変数を宣言する際にその変数に対して、数字か文字列かや格納できる数字や文字の上限,下限を決めてあげる必要があります。
- char //1byte(8bit)で表現できる数は-128~127
- short //2byte(16bit)で表現できる数は-32768~32767
- int //4byte(32bit)で表現できる数は-2147483648~2147483647
- long //8byte(64bit)で表現できる数は-9223372036854775808 ~9223372036854775807
byte及びbitについて
コンピューターは0と1の2つの数字で値を表しています。(2進数)
- 1bit //2の1乗
- 2bit //2の2乗
- 3bit //2の3乗
- 8bit=1byte //2の8乗
- 16bit=2byte //2の16乗
- 32bit=3byte //2の32乗
- 64bit=2byte //2の64乗
つまりデータ型に使うbitとは数字を格納できる下限上限を決めているわけなのです。
char型
char型は1byte(8bit),2の8乗倍の桁数を扱うことができます。
2の8乗倍は256です。数字にはマイナスもあるので、マイナスの符号を使うために1bit使います。なので1bit減った7bitで数字を扱うワケです。
7bit(2の7乗の倍)は128、マイナス128は良いのですがプラスの方は127まで扱えます。というより127までしか入れられません。
なぜマイナスの方は128までなのにプラスの方は127までなのかと言うと
これは2進数なのでプラスの方は128で繰り上がってしまうワケです。
10進数で考えるとわかりやすいです。
0から数えます。
0,1,2,3,4,5,6,7,8,9
10で繰り上がるつまり桁が増える
2進数も同様に
00,01
10で繰り上がる
しかし7bit目で繰り上がろうとしても8bit目はマイナス、プラスを表すために使用されています。
つまり繰り上がった瞬間にマイナスに転じるワケです。
7bitで繰り上がって8bit目になると-128が表示されます。
繰り上がったからといって-1からになる訳ではないのです。
プラス (1bit)と1111111(7bit)は+127
マイナス(1bit)と0000000(7bit)は-128
つまり繰り上がっているので
-0000000は10000000です。(2進数8bit)(10進数-128)
+1111111は01111111です。(2進数8bit)(10進数+127)
サンプル
Print("char",(char)129); //実行結果:-127 Print("char",(char)128); //実行結果:-128 Print("char",(char)127); //実行結果:127
※画像は下から順番です。
00000001(2進数8bit)(10進数+1)
00000000(2進数8bit)(10進数±0)
11111111(2進数8bit)(10進数-1)
でここから2進数の値が上がっていくたびに10進数の値も増えていくワケです。
-128⇒-127
マイナスなので勘違いしますが、符号がマイナスなので数字は減っていますが増えているわけです。
その他サンプル
Print("char",(char)-127); //実行結果:-127 Print("char",(char)1); //実行結果:1 Print("char",(char)512); //実行結果:0 Print("char",(char)256); //実行結果:0 Print("char",(char)0); //実行結果:0
※画像は下から順番です。
関数Print()
short型
short型は2byte(16bit),2の16乗倍の桁数を扱うことができます。
2の16乗倍は65536です。数字にはマイナスもあるので、マイナスの符号を使うために1bit使います。なので1bit減った15bitで数字を扱うワケです。
15bit(2の15乗の倍)は32768
サンプル
Print("short",(short)32769); //実行結果:-32767 Print("short",(short)32768); //実行結果:-32768 Print("short",(short)32767); //実行結果:32767
※画像は下から順番です。
int型
int型は4byte(32bit),2の32乗倍の桁数を扱うことができます。
2の32乗倍は4294967296です。数字にはマイナスもあるので、マイナスの符号を使うために1bit使います。なので1bit減った31bitで数字を扱うワケです。
31bit(2の31乗の倍)は2147483648
サンプル
Print("int",(int)2147483649); //実行結果:-2147483647 Print("int",(int)2147483648); //実行結果:-2147483648 Print("int",(int)2147483647); //実行結果:2147483647
※画像は下から順番です。
long型
int型は4byte(64bit),2の64乗倍の桁数を扱うことができます。
2の64乗倍は18446744073709551616です。数字にはマイナスもあるので、マイナスの符号を使うために1bit使います。なので1bit減った63bitで数字を扱うワケです。
63bit(2の63乗の倍)は9223372036854775808
サンプル
Print("long",(long)9223372036854775809); //実行結果:-9223372036854775807 Print("long",(long)9223372036854775808); //実行結果:-9223372036854775808 Print("long",(long)9223372036854775807); //実行結果:9223372036854775807
※画像は下から順番です。
関数Print()
unsignedで符号なし(+,-無し+のみ)に出来る
unsignedを直訳すると”符号なし”や”署名なし”になります。
unsignedを略してu
このuをデータ型の頭につけてやればOKです。
charならuchar,bit数はcharの時と同じです。1byte(8bit)
shortならushort,bit数はshortの時と同じです。2byte(16bit)
intならuint,bit数はintの時と同じです。4byte(32bit)
longならulong,bit数はlongの時と同じです。8byte(64bit)
符号に使っていた1bitを数字に使えるので扱える数字の上限が単純に倍になります。
char型は127までなのに対してuを付けるだけで下限は0ですが上限は255
short型32767までなのに対してuを付けるだけで下限は0ですが上限は65535
int型2147483647までなのに対してuを付けるだけで下限は0ですが上限は4294967295
long型9223372036854775807までなのに対してuを付けるだけで下限は0ですが上限は18446744073709551615
サンプル
Print("uchar",(uchar)255); //実行結果:255 Print("ushort",(ushort)65535); //実行結果:65535 Print("uint",(uint)4294967295); //実行結果:4294967295 Print("ulong",(ulong)18446744073709551615); //実行結果:18446744073709551615
※画像は下から順番です。
関数Print()