【问题标题】:Program printing incorrect symbolic constants values程序打印不正确的符号常量值
【发布时间】: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


【解决方案1】:

当使用 printf 时,您给出的格式字符串指定您要打印的类型。 %d 表示整数,因为 unsigned int 的最大值和 unsigned long 的最大值都不适合整数,所以会溢出并打印为 -1。

【讨论】:

    猜你喜欢
    • 2018-09-21
    • 2019-05-17
    • 1970-01-01
    • 1970-01-01
    • 2019-05-30
    • 2018-06-25
    • 2020-07-04
    • 1970-01-01
    • 2021-05-23
    相关资源
    最近更新 更多