資料型態範圍
記憶體的最小單位為bit,每一個bit可以存0或1,32位元電腦的cpu有32個bit(4byte)的存放區塊可以存放記憶體位址。
位元bit與位元組byte
bit正整數範圍
以下列出1到8個bit可以存放的最大正整數值與正整數範圍。
以下減1代表扣掉0這個數字。
bit | 組合 | 最大正整數(2進制) | 最大正整數(10進制) | 可以存放的正整數範圍 |
---|---|---|---|---|
1 | 0/1 | 1 | \(2^1-1 = 1\) | 0-1 |
2 | 00/01/10/11 | 11 | \(2^2-1 = 3\) | 0-3 |
3 | 000/001/010/100/110/101/111 | 111 | \(2^3-1 = 7\) | 0-7 |
4 | 0000/0001/0010…1111 | 1111 | \(2^4-1 = 15\) | 0-15 |
5 | 00000/00001/…11111 | 11111 | \(2^5-1 = 31\) | 0-31 |
6 | 000000/000001/…111111 | 111111 | \(2^6-1 = 63\) | 0-63 |
7 | 0000000/0000001/…1111111 | 1111111 | \(2^7-1 = 127\) | 0-127 |
8 | 00000000/00000001/…11111111 | 11111111 | \(2^8-1 = 255\) | 0-255 |
byte正整數範圍
由上表可以推斷,1個byte由8個bit組成,可存放最大正整數為255,可以存放的正整數範圍從0-255,共256個數字。
以下列出1byte到4byte最大可存放的數字。
byte | bit | 最大正整數(10進制) |
---|---|---|
1byte | 11111111 | 255 |
2byte | 11111111 11111111 | 65535 |
3byte | 11111111 11111111 11111111 | 16777216 |
4byte | 11111111 11111111 11111111 11111111 | 4294967295 |
科學記號法顯示,以下減1代表扣掉0這個數字。
byte | bit | 科學記號法 |
---|---|---|
1byte | 11111111 | $2^8-1$ |
2byte | 11111111 11111111 | $2^8 * 2^8 -1= 2^{8+8}-1 = 2 ^{16}-1 $ |
3byte | 11111111 11111111 11111111 | $2^8 * 2^8 * 2^8-1 = 2^{8+8+8}-1$ |
4byte | 11111111 11111111 11111111 11111111 | $2^8 * 2^8 * 2^8 * 2^8-1 = 2^{8+8+8+8}-1 = 2 ^{32}-1 $ |
正負數
若資料型態是包含正負數,會將最大整數減半。
在 8-bit 下,把\(2^8 = 256\)切一半,正整數 0 - 127 共 128 個正整數,負數 -1 至 -128 共 128個負數,128 正整數 + 128 負數 = 256個數字。
正整數二進位表示方式,最左邊的第1個bit為0,代表正整數。
負數的表示方式,最左邊的第1個bit為1,代表負數,把正整數的二進位0和1互換,再加上1。
二進位 | 正負數 |
---|---|
01111111 | 127 |
10000001 | -127 |
01111111 11111111 | 32767 |
10000000 00000001 | -32767 |
01111111 11111111 11111111 | 8388607 |
10000000 00000000 00000001 | -8388607 |
01111111 11111111 11111111 11111111 | 2147483647 |
10000000 00000000 00000000 00000001 | -2147483647 |
正負數範圍
把二進位最左邊的1個byte作為正負數符號,0表示正整數,1表示負數,因此有1個bit會變成正負符號, 8 bit中,只能用剩下7 bit存放數值,因此正數範圍變成$2^7 - 1$,減1代表扣掉0這個數字。
正整數
正整數二進位表示方式,最左邊的第1個bit為0,代表正整數。
以下是最大正整數,減1代表扣掉0這個數字。
byte | bit | 科學記號法 |
---|---|---|
1byte | 01111111 | $2^7-1 = 127 $ |
2byte | 01111111 11111111 | $2^7 * 2^8 -1= 2^{7+8}-1 = 2 ^{15}-1 = 32767$ |
3byte | 01111111 11111111 11111111 | $2^7 * 2^8 * 2^8-1 = 2^{7+8+8}-1 = 2 ^{23}-1 = 8388607 $ |
4byte | 01111111 11111111 11111111 11111111 | $2^7 * 2^8 * 2^8 * 2^8-1 = 2^{7+8+8+8}-1 = 2 ^{31}-1 = 2147483647 $ |
負數
最左邊的第1個bit為1,代表負數,以下為最小負數。
byte | bit | 科學記號法 |
---|---|---|
1byte | 10000000 | $-2^7 = -128 $ |
2byte | 10000000 00000000 | $-2^7 * -2^8 = -2^{7+8} = -2 ^{15} = -32768$ |
3byte | 10000000 00000000 00000000 | $-2^7 * -2^8 * -2^8 = -2^{7+8+8} = -2 ^{23} = -8388608 $ |
4byte | 10000000 00000000 00000000 00000000 | $-2^7 * -2^8 * -2^8 * -2^8 = -2^{7+8+8+8} = -2 ^{31} = -2147483648 $ |
正負數範圍
占用Byte數量 | 正負數範圍 | 科學記號法 |
---|---|---|
1byte | -128 至 -1 ~ 0 至 127 | $-2^7$ 至 $2^7 - 1$ |
2byte | -32768 至 -1 ~ 0 至 32767 | $-2 ^{15}$ 至 $2 ^{15} - 1$ |
3byte | -8388608 至 -1 ~ 0 至 8388607 | $-2 ^{23}$ 至 $2 ^{23} -1$ |
4byte | -2147483648 至 -1 ~ 0 至 2147483647 | $-2 ^{31}$ 至$2 ^{31} - 1$ |
unsinged正整數
unsigned代表沒有符號,所以只有正整數,不會有負號。
占用Byte數量 | 正數範圍 |
---|---|
1byte | 0~255 |
2byte | 0~65535 |
3byte | 0~16777216 |
4byte | 0~4294967295 |