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

时间:2017-10-18 15:51:06

标签: c++ c printf format-specifiers

假设我有

isToggled

然后printf("%llu %llx", one, two); one都可以是two类型,区别在于它们分别打印为十进制或十六进制。

有一大堆宽度说明符(unsigned long longhhhL等),看起来它们中的每一个都可以与{{} I一起使用1}}和u转换说明符,但每次允许传递右宽度的无符号类型的值。

是否真的比在xx中以前面具有相同宽度说明符的方式结束我可以传递同一时间的值并且它总是合法的吗?

1 个答案:

答案 0 :(得分:1)

  

是否真的比在xu中以前面具有相同宽度说明符的方式结束我可以传递同一时间的值并且它总是合法的吗?

是的,如果宽度说明符对其中一个有效,那么它对两者都有效,对oX也有效,并且生成的指令服务于相同的数据类型 - 指定宽度的无符号整数。唯一的区别是输出的格式化方式(或scanf格式,即输入所需的格式。)

  

有一大堆宽度说明符(hhhLI等等   像它们中的每一个都可以与u和x转换说明符一起使用   但每次我都允许传递右边无符号类型的值   宽度。

确实有各种各样的宽度说明符。大多数(但不是全部)适用于整数类型,对应于xXou以及签名的无符号类型与di对应的。但是,该标准未在其中指定L,并且根本没有指定I。但是,某些实现可能会将这些实现接受为整数宽度说明符,并具有特定于实现的行为。