18章 N進数

http://www.geocities.jp/ky_webid/c/018.html

見るからに難しそう・・・。

基本読み物なので気合入れて読みます。

読み終わったところで練習問題

問題1

キーボードから16進数の整数を入力し、それを8進数で表示させるプログラムを作って下さい。フォーマット指定子を使えば簡単にできます。

フォーマット指定子・・・。8進数の指定ってどうだっけ・・・?

int main () {
    int num;
    
    scanf("%x",&num);
    printf("%o",num);
    
    return 0;
}
$ main
7
7

$ main
8
10

$ main
10
20

$ main
a
12

$ main
0xff
377

うまくいってるっぽいですね。

問題2

異なる基数同士であっても計算できることをプログラムで試してみて下さい。例えば、8進数の37と16進数のB3との加算結果を10進数で表示させてみて下さい。

int main () {
    int num1 = 037;
    int num2 = 0xb3;
    
    printf("%d",num1 + num2);
    return 0;
}
210

ということで210になりました。

問題3

8・10・16進数の対応表を表示するプログラムを作って下さい。

面白そうですね。表を作ってみます。

int main() {
    int i;
    
    for(i=0;i<=0xff;++i){
        printf("%3d 0x%02x 0%o\n",i,i,i);
    }
    return 0;
}

どこまで表示させればいいのかわからなかったのでとりあえず16進数の最後の値0xffを終端とみなし表を作ってみました。

また、なるべく綺麗に表示されるように整形してみました。

  0 0x00 00
  1 0x01 01
  2 0x02 02
  3 0x03 03
  4 0x04 04
  5 0x05 05
  6 0x06 06
  7 0x07 07
  8 0x08 010
  9 0x09 011
 10 0x0a 012
 11 0x0b 013
 12 0x0c 014
 13 0x0d 015
 14 0x0e 016
 15 0x0f 017
 16 0x10 020
 17 0x11 021
 18 0x12 022
 19 0x13 023
 20 0x14 024
 21 0x15 025
 22 0x16 026
 23 0x17 027
 24 0x18 030
 25 0x19 031
 26 0x1a 032
 27 0x1b 033
 28 0x1c 034
 29 0x1d 035
 30 0x1e 036
 31 0x1f 037
 32 0x20 040
 33 0x21 041
 34 0x22 042
 35 0x23 043
 36 0x24 044
 37 0x25 045
 38 0x26 046
 39 0x27 047
 40 0x28 050
 41 0x29 051
 42 0x2a 052
 43 0x2b 053
 44 0x2c 054
 45 0x2d 055
 46 0x2e 056
 47 0x2f 057
 48 0x30 060
 49 0x31 061
 50 0x32 062
 51 0x33 063
 52 0x34 064
 53 0x35 065
 54 0x36 066
 55 0x37 067
 56 0x38 070
 57 0x39 071
 58 0x3a 072
 59 0x3b 073
 60 0x3c 074
 61 0x3d 075
 62 0x3e 076
 63 0x3f 077
 64 0x40 0100
 65 0x41 0101
 66 0x42 0102
 67 0x43 0103
 68 0x44 0104
 69 0x45 0105
 70 0x46 0106
 71 0x47 0107
 72 0x48 0110
 73 0x49 0111
 74 0x4a 0112
 75 0x4b 0113
 76 0x4c 0114
 77 0x4d 0115
 78 0x4e 0116
 79 0x4f 0117
 80 0x50 0120
 81 0x51 0121
 82 0x52 0122
 83 0x53 0123
 84 0x54 0124
 85 0x55 0125
 86 0x56 0126
 87 0x57 0127
 88 0x58 0130
 89 0x59 0131
 90 0x5a 0132
 91 0x5b 0133
 92 0x5c 0134
 93 0x5d 0135
 94 0x5e 0136
 95 0x5f 0137
 96 0x60 0140
 97 0x61 0141
 98 0x62 0142
 99 0x63 0143
100 0x64 0144
101 0x65 0145
102 0x66 0146
103 0x67 0147
104 0x68 0150
105 0x69 0151
106 0x6a 0152
107 0x6b 0153
108 0x6c 0154
109 0x6d 0155
110 0x6e 0156
111 0x6f 0157
112 0x70 0160
113 0x71 0161
114 0x72 0162
115 0x73 0163
116 0x74 0164
117 0x75 0165
118 0x76 0166
119 0x77 0167
120 0x78 0170
121 0x79 0171
122 0x7a 0172
123 0x7b 0173
124 0x7c 0174
125 0x7d 0175
126 0x7e 0176
127 0x7f 0177
128 0x80 0200
129 0x81 0201
130 0x82 0202
131 0x83 0203
132 0x84 0204
133 0x85 0205
134 0x86 0206
135 0x87 0207
136 0x88 0210
137 0x89 0211
138 0x8a 0212
139 0x8b 0213
140 0x8c 0214
141 0x8d 0215
142 0x8e 0216
143 0x8f 0217
144 0x90 0220
145 0x91 0221
146 0x92 0222
147 0x93 0223
148 0x94 0224
149 0x95 0225
150 0x96 0226
151 0x97 0227
152 0x98 0230
153 0x99 0231
154 0x9a 0232
155 0x9b 0233
156 0x9c 0234
157 0x9d 0235
158 0x9e 0236
159 0x9f 0237
160 0xa0 0240
161 0xa1 0241
162 0xa2 0242
163 0xa3 0243
164 0xa4 0244
165 0xa5 0245
166 0xa6 0246
167 0xa7 0247
168 0xa8 0250
169 0xa9 0251
170 0xaa 0252
171 0xab 0253
172 0xac 0254
173 0xad 0255
174 0xae 0256
175 0xaf 0257
176 0xb0 0260
177 0xb1 0261
178 0xb2 0262
179 0xb3 0263
180 0xb4 0264
181 0xb5 0265
182 0xb6 0266
183 0xb7 0267
184 0xb8 0270
185 0xb9 0271
186 0xba 0272
187 0xbb 0273
188 0xbc 0274
189 0xbd 0275
190 0xbe 0276
191 0xbf 0277
192 0xc0 0300
193 0xc1 0301
194 0xc2 0302
195 0xc3 0303
196 0xc4 0304
197 0xc5 0305
198 0xc6 0306
199 0xc7 0307
200 0xc8 0310
201 0xc9 0311
202 0xca 0312
203 0xcb 0313
204 0xcc 0314
205 0xcd 0315
206 0xce 0316
207 0xcf 0317
208 0xd0 0320
209 0xd1 0321
210 0xd2 0322
211 0xd3 0323
212 0xd4 0324
213 0xd5 0325
214 0xd6 0326
215 0xd7 0327
216 0xd8 0330
217 0xd9 0331
218 0xda 0332
219 0xdb 0333
220 0xdc 0334
221 0xdd 0335
222 0xde 0336
223 0xdf 0337
224 0xe0 0340
225 0xe1 0341
226 0xe2 0342
227 0xe3 0343
228 0xe4 0344
229 0xe5 0345
230 0xe6 0346
231 0xe7 0347
232 0xe8 0350
233 0xe9 0351
234 0xea 0352
235 0xeb 0353
236 0xec 0354
237 0xed 0355
238 0xee 0356
239 0xef 0357
240 0xf0 0360
241 0xf1 0361
242 0xf2 0362
243 0xf3 0363
244 0xf4 0364
245 0xf5 0365
246 0xf6 0366
247 0xf7 0367
248 0xf8 0370
249 0xf9 0371
250 0xfa 0372
251 0xfb 0373
252 0xfc 0374
253 0xfd 0375
254 0xfe 0376
255 0xff 0377

なかなか綺麗に出力されてますね!