printf
有一系列“长度修饰符”标记,您可以在格式规范中传递,例如%d
用于int
参数,但%hhd
用于signed char
(8位)和%lld
是long long
(64位)。
我可以看到为什么这对于大于int
类型是必要的,但是较小的类型无论如何都是implicitly promoted to int
。
在%hhd
的情况下%d
会给signed char
提供不同的输出,假设您确实传递了y2 <- c(0,0,NA,0,0,0,0)
y <- c(0,0,0,NA,NA,0)
x <- c(0,0,0,0)
li <-list(y2,y,x)
?
答案 0 :(得分:5)
促销活动将保留签名。编译器知道变量的类型,但<html>
<body>
<div class="fullviewport"></div>
<div class="extracontent"></div>
</body>
</html>
不知道。如果您尝试使用无符号会话说明符打印带符号的变量,它将以不同方式处理该变量(即,打印出符号扩展的F&#39; s)。长度修饰符printf
表示您明确要使用无符号格式打印带签名的char。实例:
hh
输出:
#include <stdio.h>
int main(void) {
char* s = "\u00d1"; /* Ñ */
for (char* p = s; *p; ++p) printf("%02X (%02hhX)\n", *p, *p);
return 0;
}
答案 1 :(得分:1)
您需要长度修饰符才能使用scanf
读取较短的数据。由于printf
和scanf
共享大致相同的格式字符串集,包括修饰符,因此主要保留了一致性问题。