面白い。暇つぶして、私も書いてみよ https://blog.agile.esm.co.jp/entry/2021/05/24/055043
17430803 journal yuuka_maniaの日記: 浮動小数のバイナリ表記 10 日記 by yuuka_mania 2023年10月23日 15時18分 面白い。暇つぶして、私も書いてみよhttps://blog.agile.esm.co.jp/entry/2021/05/24/055043
16進数では? (スコア:0)
Cで16進数なら簡単だし、それじゃだめなのかいな?
printf("%a\n", 1.23);
%aまたは%AはC99から。他の言語も似たのがあるんじゃない?
printfコマンドは%aに対応していなかった……
Re: (スコア:0)
多分、パズル的な楽しみを見出してるのだと思う。
自分でコード書いてデコードするから楽しい奴。
仕様の規模もそこまでデカくないし。
Re: (スコア:0)
>printf("%a\n", 1.23);
の結果は、
0x1.3ae147ae147aep+0
で、求めるものは違うんじゃないの、0x3F800000 が 1.0 だと言っているのだから。
Re: (スコア:0)
こうだよね
float x = 1.0;
printf("%x\n", *(int*)&x);
Re: (スコア:0)
ほかの言語だと、C++のstd::bit_cast関数やJavaのFloat.floatToIntBitsメソッドなどが思い浮かびますね。
Re: (スコア:0)
未定義動作踏んでるけどド素人かな
Re: (スコア:0)
> 未定義動作踏んでるけどド素人かな
バイナリ表示の時点で、処理系依存だよ。
Re: (スコア:0)
> バイナリ表示の時点で、処理系依存だよ。
処理系依存は処理系によっては期待した動作となるけど未定義動作は何かを期待するのが間違いだから全然違う話よ?
Re: (スコア:0)
バイナリ表示の時点で、処理系依存だよ。
printf以前の話としてfloatのオブジェクトのアドレスをintとして読み出すのがstrict-aliasing rulesに違反するんだけど分かってるかな?
https://wandbox.org/permlink/Scl0ZNxjl1SrTKh6 [wandbox.org]
Re: (スコア:0)
なるほど [jpcert.or.jp]、こうすれば良いのか:
#include <stdio.h>
int main()
{
union { float f; int i; } a = {.f = 1.0};
printf("%x\n", a.i);
}