整数の数値リテラルは、基本的にはintとして扱われます。
intの範囲を超えるサイズのものの場合、自動的に、long、long longと型が拡張されます。
long longでも扱えないサイズのリテラルはエラーになります。
8進数や16進数表記の場合には、int、unsigned int、long、unsigned long、long long、unsigned long longと、unsignedを含めて自動的に拡大されるようです。
なので、0x8000
と書いた場合、一般的な環境では、int
(32bit)の範囲内に収まるので、intになります。
16bitのintが標準である16bit環境のC言語の場合には、上の法則に合わせてunsigned int
(16bit)になるかと思われます。
標準的なintよりも小さなサイズの数値は全てintとなり、自動的に、shortやcharになることはありません。
ちょっとした実験。
C
1#include <stdio.h>
2int main(void){
3 printf("int :%lu\n",sizeof(int));
4 printf("long :%lu\n",sizeof(long));
5 printf("long long :%lu\n",sizeof(long long));
6
7 printf("1 :%lu\n",sizeof(1));
8 printf("1K :%lu\n",sizeof(1000));
9 printf("1M :%lu\n",sizeof(1000000));
10 printf("1G :%lu\n",sizeof(1000000000));
11 printf("1T :%lu\n",sizeof(1000000000000));
12 printf("1P :%lu\n",sizeof(1000000000000000));
13 printf("1E :%lu\n",sizeof(1000000000000000000));
14// printf("100E :%lu\n",sizeof(100000000000000000000)); エラー
15
16}
型のサイズは環境によって変わります。
output
1int :4
2long :8
3long long :8
41 :4
51K :4
61M :4
71G :4
81T :8
91P :8
101E :8
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/08 09:18
2020/09/08 10:03