intは-2147483648~2147483647の範囲というのはggればすぐに出てきますが
それは”なぜ”なのか知っていますか?
「〇〇型だからこの範囲」ではなく、もう少し掘り下げた部分について書いていきます!
整数型
intなどの整数型には最大値と最小値があります
Java, C#, C/C++ 等の静的型付け言語では
値の範囲がビット数に基づいて決められています。
Java
byte | 8ビット | -128 ~ 127 |
short | 16ビット | -32,768 ~ 32,767 |
int | 32ビット | -2,147,483,648 ~ 2,147,483,647 |
long | 64ビット | -9223372036854775808 ~ 9223372036854775807 |
C#
sbyte | 8ビット | -128 ~ 127 |
byte | 8ビット | 0 ~ 255 |
short | 16ビット | -32,768 ~ 32,767 |
ushort | 16ビット | 0 ~ 65,535 |
int | 32ビット | -2,147,483,648 ~ 2,147,483,647 |
uint | 32ビット | 0 ~ 4,294,967,295 |
long | 64ビット | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 |
ulong | 64ビット | 0 ~ 18,446,744,073,709,551,615 |
c#には符号なしの整数型も用意されています!

ulongなんて、とんでもない数ですね、、
C/C++
cの場合はコンパイラによって定義しているビット数が異なるようです。
8, 16bit のマイコンだったり、64bitのPCで動いていたりするので
取りうるbit数が固定では無いらしい、、
私自身はC/C++に詳しくないので、割愛します。
bit数と範囲
intでは数が大きくて考えると大変なので、8bitで考えることにします。
(Javaならbyte型、C#ならsbyte型で、他の言語でも8bitの整数型は有るはずです)
8bitでは-128~127 となっていますが
なぜ-128~127と決まっているのでしょうか?
感の良い方なら
2の8乗 = 256 だからだと気づくかもしれません。
-128~-1 = 128個
0~127 = 128個
で合計256になるため、-128~127となります。
8bitが2の8乗で256通りって言われても
何やねん!!!
となる人も居るでしょう
次はbitについて説明していきます。
bitとは
コンピュータの内部では
電圧が在れば1、無ければ0といった具合に2通りでしか表せないのです。
1bitなら0と1を表現できる枠が一つ ということになります。
1bit
0
1
2通り
(2^1)
2bit
00
01
10
11
2 × 2 = 4通り
(2^2)
3bit
000
001
010
011
100
101
110
111
2 × 2 × 2 = 8通り
(2^3)
としていくと、0と1の2つ ^ bit数 が組み合わせの数だと分かりますね!
8bitだと 2^8で256通りになります
マイナスの表し方
ここでは更に数を小さくし簡単に、4bitで考えてみます。
4bitを2進数で表した場合
0000~1111
となり、マイナス(負数)がありませんが
どうやって表しているのでしょうか?
2の補数という方法で表現していて、下の表のようになります。
10進数 | 2進数 |
−8 | 1000 |
−7 | 1001 |
−6 | 1010 |
−5 | 1011 |
−4 | 1100 |
−3 | 1101 |
−2 | 1110 |
−1 | 1111 |
0 | 0000 |
1 | 0001 |
2 | 0010 |
3 | 0011 |
4 | 0100 |
5 | 0101 |
6 | 0110 |
7 | 0111 |
他にも
- 符号と絶対値
- 1の補数
と言われる表現方法もあるのですが、+0と-0が出てしまったり
2の補数の方が演算が簡単だったりと問題があるため、2の補数がコンピュータの世界ではよく使われています。
最後に
今回は直接的なプログラミングの話ではなく、コンピュータの考え方によった話なりましたが
知っておくとプログラミングへの理解も深まると思います。
お読み頂きありがとうございました!
コメント