【问题标题】:Maximum Value for Unsigned Int is it -1 [duplicate]Unsigned Int 的最大值是 -1 [重复]
【发布时间】:2018-07-02 16:50:47
【问题描述】:

我试图找出无符号数据类型的最小值和最大值。我知道最小无符号值为0,最大值为(2^n)-1。但是,当我尝试运行我的程序时(我无法发布我的代码,但您可以参考this),我一直将 -1 作为最大值。有人可以向我解释为什么吗?另外,UINT_MAX 给我 4294967295,而 ULLONG_MAX 是 4294967295。但是,unsigned int 的最大值应该是 65535,而 unsigned long long int 应该是 +18,446,744,073,709,551,615。为什么输出不同?

【问题讨论】:

  • 也许您使用错误的格式说明符打印它?
  • UINT_MAX 在位方面与二进制补码表示法中的 -1 相同。您可能会将其打印为有符号整数。

标签: c types unsigned unsigned-integer unsigned-long-long-int


【解决方案1】:

您使用什么格式说明符来打印这些值? 此类错误大多是由于格式说明符错误造成的。

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

int main()
{  
    printf("%u", UINT_MAX); // This will print 4294967295 (system dependent)
    printf("%d", UINT_MAX); // This will print -1
    return 0;
}

【讨论】:

  • printf("%d", UINT_MAX); // This will print -1 这也取决于系统,因为并非每个系统都是二进制补码。
  • @ChristianGibbons:虽然理论上可以存在非双补机器,但在博物馆外找不到。
  • 我同意你的两个评论
  • %d ver 是未定义的行为,因此可以打印任何内容,或格式化您的硬盘
  • 我的同学也得到-1
猜你喜欢
  • 2012-12-15
  • 2013-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多