【发布时间】:2022-06-28 23:47:56
【问题描述】:
我目前正在学习 C,并且正在尝试完成 K&R 练习 2-1。 (编写一个程序来确定 char、short、int 和 long 变量的范围,两者都是 有符号和无符号,通过从标准头打印适当的值和直接计算。)我编写了以下代码来实现这一点:
#include <stdio.h>
#include <limits.h>
#include <float.h>
int main() {
printf("Unsigned Variable Ranges\n");
printf("Unsigned char: %d %d\n", 0, UCHAR_MAX);
printf("Unsigned short: %d %d\n", 0, USHRT_MAX);
printf("Unsigned int: %d %d\n", 0, UINT_MAX);
printf("Unsigned long: %d %d\n", 0, ULONG_MAX);
}
我的思考过程是使用limits.h 和float.h 中的符号常量来打印我的程序中的最小值和最大值。 char 和 short 值打印正确,但 int 和 long 值打印为 -1。终端显示:
Unsigned Variable Ranges
Unsigned char: 0 255
Unsigned short: 0 65535
Unsigned int: 0 -1
Unsigned long: 0 -1
这是我的错误还是编译器/Visual Studio 错误?
【问题讨论】:
-
使用 %u 表示无符号
-
嗯,
UINT_MAX(不是说ULONG_MAX)本来就大于INT_MAX,这是使用%d可以打印的最大值...
标签: c