"x" 和 "u" printf/scanf 转换说明符是否同样适用于相同类型?
Are "x" and "u" printf/scanf conversion specifiers equally applicable to the same types?
假设我有
printf("%llu %llx", one, two);
然后 one
和 two
都可以是 unsigned long long
类型,不同之处在于它们分别打印为十进制或十六进制。
有一大堆宽度说明符(h
、hh
、L
、I
等),看起来它们中的每一个都可以与两者一起使用u
和 x
转换说明符,但每次我都被允许传递正确宽度的无符号类型的值。
无论它以 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?
是的,如果宽度说明符对其中之一有效,则它对两者以及 o
和 X
都有效,并且生成的指令具有相同的作用数据类型——指定宽度的无符号整数。唯一的区别是输出的格式化方式(或者对于 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.
确实有各种各样的宽度说明符。它们中的大多数(但不是全部)适用于整数类型,包括对应于 x
、X
、o
和 u
的无符号整数和有符号整数类型对应于 d
和 i
。但是,该标准并未在其中指定 L
,并且根本未指定 I
。一些实现可能仍然接受那些作为整数宽度说明符,具有特定于实现的行为。
假设我有
printf("%llu %llx", one, two);
然后 one
和 two
都可以是 unsigned long long
类型,不同之处在于它们分别打印为十进制或十六进制。
有一大堆宽度说明符(h
、hh
、L
、I
等),看起来它们中的每一个都可以与两者一起使用u
和 x
转换说明符,但每次我都被允许传递正确宽度的无符号类型的值。
无论它以 x
结尾还是以 u
结尾,前面有相同的宽度说明符,我都可以同时传递值并且它总是合法的,这是真的吗?
Is it true than no matter if it ends in
x
or inu
with the same width specifier in front I can pass values of the same time and it'll always be legal?
是的,如果宽度说明符对其中之一有效,则它对两者以及 o
和 X
都有效,并且生成的指令具有相同的作用数据类型——指定宽度的无符号整数。唯一的区别是输出的格式化方式(或者对于 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.
确实有各种各样的宽度说明符。它们中的大多数(但不是全部)适用于整数类型,包括对应于 x
、X
、o
和 u
的无符号整数和有符号整数类型对应于 d
和 i
。但是,该标准并未在其中指定 L
,并且根本未指定 I
。一些实现可能仍然接受那些作为整数宽度说明符,具有特定于实现的行为。