"x" 和 "u" printf/scanf 转换说明符是否同样适用于相同类型?

Are "x" and "u" printf/scanf conversion specifiers equally applicable to the same types?

假设我有

printf("%llu %llx", one, two);

然后 onetwo 都可以是 unsigned long long 类型,不同之处在于它们分别打印为十进制或十六进制。

有一大堆宽度说明符(hhhLI 等),看起来它们中的每一个都可以与两者一起使用ux 转换说明符,但每次我都被允许传递正确宽度的无符号类型的值。

无论它以 x 结尾还是以 u 结尾,前面有相同的宽度说明符,我都可以同时传递值并且它总是合法的,这是真的吗?

Is it true than no matter if it ends in x or in u with the same width specifier in front I can pass values of the same time and it'll always be legal?

是的,如果宽度说明符对其中之一有效,则它对两者以及 oX 都有效,并且生成的指令具有相同的作用数据类型——指定宽度的无符号整数。唯一的区别是输出的格式化方式(或者对于 scanf,输入的预期格式)。

There's a whole bunch of width specifiers (h, hh, L, I, etc) and looks like each of them can be used with both u and x conversion specifier but each time I'm allowed to pass values of unsigned type of the right width.

确实有各种各样的宽度说明符。它们中的大多数(但不是全部)适用于整数类型,包括对应于 xXou 的无符号整数和有符号整数类型对应于 di。但是,该标准并未在其中指定 L,并且根本未指定 I。一些实现可能仍然接受那些作为整数宽度说明符,具有特定于实现的行为。