75日目 printf("a:%a\n", EOF);〜printf("z:%z\n", EOF);
ひさしぶりに何も用事のない穏やかな休日だったので遊んでみた。
#include <stdio.h> int main() { printf("a:%a\n", EOF); printf("b:%b\n", EOF); printf("c:%c\n", EOF); printf("d:%d\n", EOF); printf("e:%e\n", EOF); printf("f:%f\n", EOF); printf("g:%g\n", EOF); printf("h:%h\n", EOF); printf("i:%i\n", EOF); printf("j:%j\n", EOF); printf("k:%k\n", EOF); printf("l:%l\n", EOF); printf("m:%m\n", EOF); printf("n:%n\n", EOF); printf("o:%o\n", EOF); printf("p:%p\n", EOF); printf("q:%q\n", EOF); printf("r:%r\n", EOF); printf("s:%n\n", EOF); printf("t:%t\n", EOF); printf("u:%u\n", EOF); printf("v:%v\n", EOF); printf("w:%w\n", EOF); printf("x:%x\n", EOF); printf("y:%y\n", EOF); printf("z:%z\n", EOF); return 0; }
実行結果
a:0x0.000010p-1022 b:b c: d:-1 e:2.121996e-314 f:0.000000 g:2.122e-314 h: i:-1 j:j k:k l: m:m n:
まず%nでエラー出ました。強制的に実行が中止されました。
printf("n:error");として続きを。
n:error o:37777777777 p:FFFFFFFF q:q r:r
こんどは%sが実行できません。これもエラー表示して再トライです。
s:error t:t u:4294967295 v:v w: x:ffffffff y:y z:z
なるほどね
b, j, k, m, q, r, t, v, y, zは自分自身が出てくる。
h, l, wも何にもなさそうだから消そう。
EOFばっかりやってても能がないので、EOFをcに置換し、int c = 1;にして実行
a:0x0.000000p-1022 c:^A d:1 e:4.940656e-324 f:0.000000 g:4.94066e-324 i:1 n:error o:1 p:00000001 s:error u:1 x:1
あと1は何進法でも1だから、違いがわかりにくいのでi = 256;として実行
#include <stdio.h> int main() { int c = 256; printf("a:%a\n", c); printf("c:%c\n", c); printf("d:%d\n", c); printf("e:%e\n", c); printf("f:%f\n", c); printf("g:%g\n", c); printf("i:%i\n", c); printf("n:error\n", c); printf("o:%o\n", c); printf("p:%p\n", c); printf("s:error\n", c); printf("u:%u\n", c); printf("x:%x\n", c); return 0; }
結果
a:0x0.000000p-1022 c: d:256 e:1.264808e-321 f:0.000000 g:1.26481e-321 i:256 n:error o:400 p:00000100 s:error u:256 x:100
グループ分け
うん。だんだん見えてきた気がする。
d,i,uのグループと、a,e,f,gのグループと、o,p,xのグループと、n,sのグループ。で今んとこcは仲間はずれ。
クラスタ | メンバー | 挙動 |
---|---|---|
割と素直 | d,i,u | 256を表示。ただしuに注意 |
下二桁が0 | o,p,x | n進法っぽい。pの00000が気になる |
桁数大杉>< | a,e,f,g | p-とかe-なんちゃら。gはeを丸めた感じ |
エラー | n,s | エラー |
? | c | 変な記号出す |
んで今気づいたんだけど、コマンドプロンプトからc: のところの変な空白を含んで
範囲指定→コピー(Enterキー)しようとするとコピーできない。
なんでかね。
doubleだとどうか
double i = 256;としてみた結果がこれだよ!!!!!
(編集済み)
d:0 i:0 u:0 o:0 p:00000000 x:0 a:0x1.000000p+8 e:2.560000e+002 f:256.000000 g:256
eがまともな値になってきました。d,i,o,p,u,xは思考停止www
fは浮動小数点の変換用ですからこれでおっけーですね。
aのルールがまだ良くわかんないな。
int i = -256;の結果(一部)
d:-256 i:-256 u:4294967040 o:37777777400 p:FFFFFF00 x:ffffff00