c - 如果无符号类型不应该有负值,为什么当我打开所有位时它是负值?

标签 c limit

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

int main(void)
{
    unsigned long x = 0;

    x = x ^ ~x;
    printf("%d\n", x);

    x = (unsigned long)pow(2, sizeof(x)*8);
    printf("%d\n", x);

    x = ULONG_MAX;
    printf("%d\n", x);
    return 0;
}

我在 Windows 7 上使用 CodeBlocks12.11 和 MinGW 4.7.0-1。由于某种原因,我无法让我的变量 x 获取最大可能的十进制值表示形式。为什么会发生这种情况,我确信 x = ULONG_MAX 应该有效,但它也会导致 -1,现在肯定是不对的!我也尝试在代码块之外编译它。

我在这里错过了什么?

最佳答案

您必须使用u 打印无符号变量。 long 以 l 为前缀,因此在这种情况下您需要 lu

printf("%lu\n", x);

关于c - 如果无符号类型不应该有负值,为什么当我打开所有位时它是负值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15713575/

相关文章:

mysql - 选择前 n 金额(考虑某些记录具有相同金额)

android - 什么是 Android APK 大小限制(不是市场限制)?

c - 如何从文件中读取特定格式的数据?

c - 使用 varargs 在我的 printf 包装器中没有返回错误

超出 Java GC 开销限制。大量的 HashMap 和优先级队列。我能做些什么?

php - 如何在 CodeIgniter 中组合 query() 和 limit() 方法

c - 在 c 中集成 3pp lib 时函数名称重叠

c++ - 调试 C++ 与调试 C 相比

c - 需要帮助从 ltp 测试套件文件 tst_res.c 理解这个宏

php - 选择一个元素列表和每个元素的 5 个标签