加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 为什么数据类型的最大值显示荒谬的高值?

发布时间:2020-12-16 10:13:55 所属栏目:百科 来源:网络整理
导读:我正在做K R C的问题2.1,它基本上要我们搞乱并理解标题库 #includestdio.h#includelimits.h#includefloat.hint main(){ printf("%lu",ULONG_MAX);} 当我运行这个程序时,我得到了输出 4294967295 等于232 -1.我期待这个值(因为K R在它的附录中具有相同的值).
我正在做K& R C的问题2.1,它基本上要我们搞乱并理解标题库

#include<stdio.h>
#include<limits.h>
#include<float.h>

int main()
{
    printf("%lu",ULONG_MAX);
}

当我运行这个程序时,我得到了输出

4294967295

等于232 -1.我期待这个值(因为K& R在它的附录中具有相同的值).

现在我将%lu更改为%llu.

由于我对C语言知之甚少,我假设%llu是ULONG_MAX值的一个更大的“占位符”.

我希望得到相同的输出,但我得到一个模糊的输出

38654705663

ULONG_MAX不应该是常数吗?为什么会改变?
另外,为了寻求答案,我偶然发现了this.

我理解标准提到“最小”这个术语的论点,但是当我用CHAR_MAX测试它时(即尝试用%llu说明符打印CHAR_MAX),我得到了

38654705663

这与我在C中读过有关char的所有内容相矛盾.

真的希望有人能解决这方面的困惑.

解决方法

其他printf()参数的类型必须与使用的占位符匹配.否则行为未定义.

%llu代表unsigned long long,因此你的参数也必须是unsigned long long:

printf("%llu",(unsigned long long)ULONG_MAX);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读