次の行が正しくありません:
printf("%08x\n", BlocksLeft);
%x
フォーマットあなたが与える引数がintであることをコンパイラに示します。これは未定義の動作につながります。私はあなたのコードをコンパイルしようとした私が得た:
>gcc -Wall -Wextra -Werror -std=gnu99 -o stackoverflow.exe stackoverflow.c
stackoverflow.c: In function 'main':
stackoverflow.c:15:4: error: format '%x' expects argument of type 'unsigned int', but argument 2 has type 'double' [-Werror=format=]
printf("%08x\n", BlocksLeft);
^
、少なくとも-Wall
強い警告レベルでコンパイルしてみてください。
あなたはあなたのプログラムは、例えば、この方法を修正することができます。
#include <stdio.h>
int main()
{
float BlocksLeft = 0xFF0000 - 0xFF7FF;
int BLeft = 0xFF0000 - 0xFF7FF;
printf("%08x\n", (int) BlocksLeft); // Works because BlocksLeft's value is non negative
// or
printf("%08x\n", (unsigned int) BlocksLeft);
// or
printf("%.8e\n", BlocksLeft);
printf("%08x\n", BLeft);
}
を、私はこのオンラインコンパイラを使用しています http://www.tutorialspoint.com/compile_c_online.php –
フロートは、符号なし整数ではありませんしたがって、 '%x'はUBにつながる 'BlocksLeft'のフォーマット指定子として不正です。 –
'float'を出力して意味を調べるには' printf( "%。9e \ n"、BlocksLeft); '%08x'は符号なし整数です。 – chux