データ型について
最終更新日:2004-06-11.
今回は、データ型についてちょっと。
数字、文字、文字列などを処理するために、変数という物があります。
このとき、変数を宣言して、値を代入して、いろいろな処理ができます。
ここで、適切なデータ型を使いましょう。
変数を宣言すると、これに対応した領域がメモリ上に作られます。
変数とは、値を記憶しておく入れ物のようなものです。
小さい入れ物には少しの情報が記憶できます。
大きい入れ物には大きな情報が保存できます。
また、整数や実数などの数を扱う型と、
文字や文字列を扱う型があります。
例えば。
整数を扱うときはintを使いますが、
その中でも小さい数はshort、大きい数はlongを使います。
実数はfloatやdoubleを使います。
半角文字1文字を扱うときはcharを使い、全角文字や文字列を扱うときは
配列という方法を使用したchar型の変数を複数使います。
では、各変数についてちょっと。
・Cのデータ型
char型:半角文字1文字を代入できる。
8ビット、1バイト。
int型:整数を代入できる。
16ビット、2バイト。
(ただし、このサイズは処理系によって異なる。)
short型:整数を代入できる。
16ビット、2バイト。
long型:整数を代入できる。
32ビット、4バイト。
float型:実数を代入できる。
32ビット、4バイト。
double型:実数を代入できる。
64ビット、8バイト。
long double型:実数を代入できる。
80ビット、10バイト。
上記int型のサイズは、手元にある16ビットのコンパイラで
採用されている値です。
char型は8ビット(1バイト)なので、
2進数でいうところの00000000から11111111までの
256通りの組み合わせがあり、256通りの情報が表現できます。
アスキーコード(半角の英数字、カナ、記号など)が表現できます。
符号無し整数ならば0から255まで、符号付き整数ならば
-128から127までの値が表現できます。
全角文字を表現するときは、文字型配列を使用します。
int型は、処理系によってshort型、またはlong型と同じサイズを
持っています。
この大きさを調べる方法としてsizeof(int)などが考えられます。
・変数を使用する
変数を使用して数値や文字などを代入するには、
適切なデータ型と変数名を宣言します。
変数を宣言すると、メモリ上にその変数の名前で領域が確保されます。
int i;
上記は、メモリ上にint型(整数型)のサイズでiという名前の変数が
確保されます。
i=0;
こうすることで、変数iに値0が代入されます。
では、それらをソースで見てみましょう。
まず、変数のサイズを調べてみましょう。
+------------------------------------------------------------+
/* filename=no006-1.c */
/* include */
#include <stdio.h>
/* main */
int main( )
{
/* 変数のサイズを調べる */
printf("char=%d\n", sizeof(char));
printf("int=%d\n", sizeof(int));
printf("short=%d\n", sizeof(short));
printf("long=%d\n", sizeof(long));
printf("float=%d\n", sizeof(float));
printf("double=%d\n", sizeof(double));
printf("double long=%d\n", sizeof(double long));
return 0;/* 終了 */
}
+------------------------------------------------------------+
上記のソースをコンパイルして実行すると以下のように表示されました。
char=1
int=2
short=2
long=4
float=4
double=8
double long=10
次に、char型の変数の値を10進数、16進数、2進数で
表示してみましょう。
以下のソースでchar型は符号なしの0から255までの値としました。
+------------------------------------------------------------+
/* filename=no006-2.c */
/* include */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* 関数プロトタイプ宣言 */
void my_strnum(char *word);
/* main */
int main( )
{
int val=0;
int radix=2;/* 2進数 */
char c='\0';/* char型の変数 */
char word[10];/* 文字列として */
/* 256までの数値を処理する */
while( val<=256 ){
itoa((int)c, word, radix);/* 2進数に変換 */
my_strnum(word);/* 文字列の長さをそろえる */
printf("%3d=%03d 0x%02x (%s)\n", val, c, c, word);
val++;/* 値を一つ進める */
c++;
}
return 0;/* 終了 */
}
void my_strnum(char *word)/* 文字列をそろえる */
{
int i, len;
char word2[10]="00000000";
len=strlen(word);/* 文字列の長さ */
i=8-len;/* 長さの差 */
strcpy(&word2[i], word);/* データを適切な場所へ書き込む */
strcpy(word, word2);/* 結果を書き戻す */
return;/* 戻る */
}
+------------------------------------------------------------+
上記のソースをコンパイルして実行すると以下のように表示されました。
0=000 0x00 (00000000)
1=001 0x01 (00000001)
2=002 0x02 (00000010)
3=003 0x03 (00000011)
4=004 0x04 (00000100)
5=005 0x05 (00000101)
6=006 0x06 (00000110)
7=007 0x07 (00000111)
8=008 0x08 (00001000)
9=009 0x09 (00001001)
10=010 0x0a (00001010)
11=011 0x0b (00001011)
12=012 0x0c (00001100)
13=013 0x0d (00001101)
14=014 0x0e (00001110)
15=015 0x0f (00001111)
16=016 0x10 (00010000)
17=017 0x11 (00010001)
18=018 0x12 (00010010)
19=019 0x13 (00010011)
20=020 0x14 (00010100)
21=021 0x15 (00010101)
22=022 0x16 (00010110)
23=023 0x17 (00010111)
24=024 0x18 (00011000)
25=025 0x19 (00011001)
26=026 0x1a (00011010)
27=027 0x1b (00011011)
28=028 0x1c (00011100)
29=029 0x1d (00011101)
30=030 0x1e (00011110)
31=031 0x1f (00011111)
32=032 0x20 (00100000)
33=033 0x21 (00100001)
34=034 0x22 (00100010)
35=035 0x23 (00100011)
36=036 0x24 (00100100)
37=037 0x25 (00100101)
38=038 0x26 (00100110)
39=039 0x27 (00100111)
40=040 0x28 (00101000)
41=041 0x29 (00101001)
42=042 0x2a (00101010)
43=043 0x2b (00101011)
44=044 0x2c (00101100)
45=045 0x2d (00101101)
46=046 0x2e (00101110)
47=047 0x2f (00101111)
48=048 0x30 (00110000)
49=049 0x31 (00110001)
50=050 0x32 (00110010)
51=051 0x33 (00110011)
52=052 0x34 (00110100)
53=053 0x35 (00110101)
54=054 0x36 (00110110)
55=055 0x37 (00110111)
56=056 0x38 (00111000)
57=057 0x39 (00111001)
58=058 0x3a (00111010)
59=059 0x3b (00111011)
60=060 0x3c (00111100)
61=061 0x3d (00111101)
62=062 0x3e (00111110)
63=063 0x3f (00111111)
64=064 0x40 (01000000)
65=065 0x41 (01000001)
66=066 0x42 (01000010)
67=067 0x43 (01000011)
68=068 0x44 (01000100)
69=069 0x45 (01000101)
70=070 0x46 (01000110)
71=071 0x47 (01000111)
72=072 0x48 (01001000)
73=073 0x49 (01001001)
74=074 0x4a (01001010)
75=075 0x4b (01001011)
76=076 0x4c (01001100)
77=077 0x4d (01001101)
78=078 0x4e (01001110)
79=079 0x4f (01001111)
80=080 0x50 (01010000)
81=081 0x51 (01010001)
82=082 0x52 (01010010)
83=083 0x53 (01010011)
84=084 0x54 (01010100)
85=085 0x55 (01010101)
86=086 0x56 (01010110)
87=087 0x57 (01010111)
88=088 0x58 (01011000)
89=089 0x59 (01011001)
90=090 0x5a (01011010)
91=091 0x5b (01011011)
92=092 0x5c (01011100)
93=093 0x5d (01011101)
94=094 0x5e (01011110)
95=095 0x5f (01011111)
96=096 0x60 (01100000)
97=097 0x61 (01100001)
98=098 0x62 (01100010)
99=099 0x63 (01100011)
100=100 0x64 (01100100)
101=101 0x65 (01100101)
102=102 0x66 (01100110)
103=103 0x67 (01100111)
104=104 0x68 (01101000)
105=105 0x69 (01101001)
106=106 0x6a (01101010)
107=107 0x6b (01101011)
108=108 0x6c (01101100)
109=109 0x6d (01101101)
110=110 0x6e (01101110)
111=111 0x6f (01101111)
112=112 0x70 (01110000)
113=113 0x71 (01110001)
114=114 0x72 (01110010)
115=115 0x73 (01110011)
116=116 0x74 (01110100)
117=117 0x75 (01110101)
118=118 0x76 (01110110)
119=119 0x77 (01110111)
120=120 0x78 (01111000)
121=121 0x79 (01111001)
122=122 0x7a (01111010)
123=123 0x7b (01111011)
124=124 0x7c (01111100)
125=125 0x7d (01111101)
126=126 0x7e (01111110)
127=127 0x7f (01111111)
128=128 0x80 (10000000)
129=129 0x81 (10000001)
130=130 0x82 (10000010)
131=131 0x83 (10000011)
132=132 0x84 (10000100)
133=133 0x85 (10000101)
134=134 0x86 (10000110)
135=135 0x87 (10000111)
136=136 0x88 (10001000)
137=137 0x89 (10001001)
138=138 0x8a (10001010)
139=139 0x8b (10001011)
140=140 0x8c (10001100)
141=141 0x8d (10001101)
142=142 0x8e (10001110)
143=143 0x8f (10001111)
144=144 0x90 (10010000)
145=145 0x91 (10010001)
146=146 0x92 (10010010)
147=147 0x93 (10010011)
148=148 0x94 (10010100)
149=149 0x95 (10010101)
150=150 0x96 (10010110)
151=151 0x97 (10010111)
152=152 0x98 (10011000)
153=153 0x99 (10011001)
154=154 0x9a (10011010)
155=155 0x9b (10011011)
156=156 0x9c (10011100)
157=157 0x9d (10011101)
158=158 0x9e (10011110)
159=159 0x9f (10011111)
160=160 0xa0 (10100000)
161=161 0xa1 (10100001)
162=162 0xa2 (10100010)
163=163 0xa3 (10100011)
164=164 0xa4 (10100100)
165=165 0xa5 (10100101)
166=166 0xa6 (10100110)
167=167 0xa7 (10100111)
168=168 0xa8 (10101000)
169=169 0xa9 (10101001)
170=170 0xaa (10101010)
171=171 0xab (10101011)
172=172 0xac (10101100)
173=173 0xad (10101101)
174=174 0xae (10101110)
175=175 0xaf (10101111)
176=176 0xb0 (10110000)
177=177 0xb1 (10110001)
178=178 0xb2 (10110010)
179=179 0xb3 (10110011)
180=180 0xb4 (10110100)
181=181 0xb5 (10110101)
182=182 0xb6 (10110110)
183=183 0xb7 (10110111)
184=184 0xb8 (10111000)
185=185 0xb9 (10111001)
186=186 0xba (10111010)
187=187 0xbb (10111011)
188=188 0xbc (10111100)
189=189 0xbd (10111101)
190=190 0xbe (10111110)
191=191 0xbf (10111111)
192=192 0xc0 (11000000)
193=193 0xc1 (11000001)
194=194 0xc2 (11000010)
195=195 0xc3 (11000011)
196=196 0xc4 (11000100)
197=197 0xc5 (11000101)
198=198 0xc6 (11000110)
199=199 0xc7 (11000111)
200=200 0xc8 (11001000)
201=201 0xc9 (11001001)
202=202 0xca (11001010)
203=203 0xcb (11001011)
204=204 0xcc (11001100)
205=205 0xcd (11001101)
206=206 0xce (11001110)
207=207 0xcf (11001111)
208=208 0xd0 (11010000)
209=209 0xd1 (11010001)
210=210 0xd2 (11010010)
211=211 0xd3 (11010011)
212=212 0xd4 (11010100)
213=213 0xd5 (11010101)
214=214 0xd6 (11010110)
215=215 0xd7 (11010111)
216=216 0xd8 (11011000)
217=217 0xd9 (11011001)
218=218 0xda (11011010)
219=219 0xdb (11011011)
220=220 0xdc (11011100)
221=221 0xdd (11011101)
222=222 0xde (11011110)
223=223 0xdf (11011111)
224=224 0xe0 (11100000)
225=225 0xe1 (11100001)
226=226 0xe2 (11100010)
227=227 0xe3 (11100011)
228=228 0xe4 (11100100)
229=229 0xe5 (11100101)
230=230 0xe6 (11100110)
231=231 0xe7 (11100111)
232=232 0xe8 (11101000)
233=233 0xe9 (11101001)
234=234 0xea (11101010)
235=235 0xeb (11101011)
236=236 0xec (11101100)
237=237 0xed (11101101)
238=238 0xee (11101110)
239=239 0xef (11101111)
240=240 0xf0 (11110000)
241=241 0xf1 (11110001)
242=242 0xf2 (11110010)
243=243 0xf3 (11110011)
244=244 0xf4 (11110100)
245=245 0xf5 (11110101)
246=246 0xf6 (11110110)
247=247 0xf7 (11110111)
248=248 0xf8 (11111000)
249=249 0xf9 (11111001)
250=250 0xfa (11111010)
251=251 0xfb (11111011)
252=252 0xfc (11111100)
253=253 0xfd (11111101)
254=254 0xfe (11111110)
255=255 0xff (11111111)
256=000 0x00 (00000000)
戻る