以十六进制打印负数是否有隐含的字长?

Is there an implied word size for printing negative numbers in hexadecimal?

以下所有内容产生相同的输出ffffffef

printf("%x\n", -17);
printf("%2x\n", -17);
printf("%8x\n", -17);

为什么?

%x in printf() 需要一个 unsigned int 参数。假设 int 是 32 位,在您的示例中,-17 转换为 4294967279u (0xffffffef)。这意味着格式化输出至少为 8 个字符,即使您使用 %x%2x.

如果使用:

你会得到不同的结果
printf("%hx\n", -17);   // ffef

在此示例中,%hx 需要 unsigned short,因此结果不同。

%2x%4x%8x中,这里的数字表示将打印的最小字符宽度。现在由于 ffffffef 是 8 个字符宽,所以三种情况下打印的都是一样的,因为字符宽度是 >= 指定的数字。如果指定格式时的数字是 >= 8,那么您会在开头看到一个额外的 space(这取决于您指定打印格式的方式)。