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:&#63731;
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