回答編集履歴
1
追加
answer
CHANGED
@@ -2,4 +2,42 @@
|
|
2
2
|
intの範囲を超えるサイズのものの場合、自動的に、long、long longと型が拡張されます。
|
3
3
|
long longでも扱えないサイズのリテラルはエラーになります。
|
4
4
|
|
5
|
-
8進数や16進数表記の場合には、int、unsigned int、long、unsigned long、long long、unsigned long longと、unsignedを含めて自動的に拡大されるようです。
|
5
|
+
8進数や16進数表記の場合には、int、unsigned int、long、unsigned long、long long、unsigned long longと、unsignedを含めて自動的に拡大されるようです。
|
6
|
+
|
7
|
+
なので、`0x8000`と書いた場合、一般的な環境では、`int`(32bit)の範囲内に収まるので、intになります。
|
8
|
+
16bitのintが標準である16bit環境のC言語の場合には、上の法則に合わせて`unsigned int`(16bit)になるかと思われます。
|
9
|
+
|
10
|
+
標準的なintよりも小さなサイズの数値は全てintとなり、自動的に、shortやcharになることはありません。
|
11
|
+
|
12
|
+
ちょっとした実験。
|
13
|
+
```C
|
14
|
+
#include <stdio.h>
|
15
|
+
int main(void){
|
16
|
+
printf("int :%lu\n",sizeof(int));
|
17
|
+
printf("long :%lu\n",sizeof(long));
|
18
|
+
printf("long long :%lu\n",sizeof(long long));
|
19
|
+
|
20
|
+
printf("1 :%lu\n",sizeof(1));
|
21
|
+
printf("1K :%lu\n",sizeof(1000));
|
22
|
+
printf("1M :%lu\n",sizeof(1000000));
|
23
|
+
printf("1G :%lu\n",sizeof(1000000000));
|
24
|
+
printf("1T :%lu\n",sizeof(1000000000000));
|
25
|
+
printf("1P :%lu\n",sizeof(1000000000000000));
|
26
|
+
printf("1E :%lu\n",sizeof(1000000000000000000));
|
27
|
+
// printf("100E :%lu\n",sizeof(100000000000000000000)); エラー
|
28
|
+
|
29
|
+
}
|
30
|
+
```
|
31
|
+
型のサイズは環境によって変わります。
|
32
|
+
```output
|
33
|
+
int :4
|
34
|
+
long :8
|
35
|
+
long long :8
|
36
|
+
1 :4
|
37
|
+
1K :4
|
38
|
+
1M :4
|
39
|
+
1G :4
|
40
|
+
1T :8
|
41
|
+
1P :8
|
42
|
+
1E :8
|
43
|
+
```
|