変数を宣言するときに使う整数のデータ型(char,short,int,long)(MQL4)

データ型(整数)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()

シェアする

  • このエントリーをはてなブックマークに追加

フォローする