回答編集履歴

1

追加

2020/09/08 09:39

投稿

amiya
amiya

スコア1218

test CHANGED
@@ -7,3 +7,79 @@
7
7
 
8
8
 
9
9
  8進数や16進数表記の場合には、int、unsigned int、long、unsigned long、long long、unsigned long longと、unsignedを含めて自動的に拡大されるようです。
10
+
11
+
12
+
13
+ なので、`0x8000`と書いた場合、一般的な環境では、`int`(32bit)の範囲内に収まるので、intになります。
14
+
15
+ 16bitのintが標準である16bit環境のC言語の場合には、上の法則に合わせて`unsigned int`(16bit)になるかと思われます。
16
+
17
+
18
+
19
+ 標準的なintよりも小さなサイズの数値は全てintとなり、自動的に、shortやcharになることはありません。
20
+
21
+
22
+
23
+ ちょっとした実験。
24
+
25
+ ```C
26
+
27
+ #include <stdio.h>
28
+
29
+ int main(void){
30
+
31
+ printf("int :%lu\n",sizeof(int));
32
+
33
+ printf("long :%lu\n",sizeof(long));
34
+
35
+ printf("long long :%lu\n",sizeof(long long));
36
+
37
+
38
+
39
+ printf("1 :%lu\n",sizeof(1));
40
+
41
+ printf("1K :%lu\n",sizeof(1000));
42
+
43
+ printf("1M :%lu\n",sizeof(1000000));
44
+
45
+ printf("1G :%lu\n",sizeof(1000000000));
46
+
47
+ printf("1T :%lu\n",sizeof(1000000000000));
48
+
49
+ printf("1P :%lu\n",sizeof(1000000000000000));
50
+
51
+ printf("1E :%lu\n",sizeof(1000000000000000000));
52
+
53
+ // printf("100E :%lu\n",sizeof(100000000000000000000)); エラー
54
+
55
+
56
+
57
+ }
58
+
59
+ ```
60
+
61
+ 型のサイズは環境によって変わります。
62
+
63
+ ```output
64
+
65
+ int :4
66
+
67
+ long :8
68
+
69
+ long long :8
70
+
71
+ 1 :4
72
+
73
+ 1K :4
74
+
75
+ 1M :4
76
+
77
+ 1G :4
78
+
79
+ 1T :8
80
+
81
+ 1P :8
82
+
83
+ 1E :8
84
+
85
+ ```