C编程 - unsigned int overflow问题

问题描述 投票:0回答:1

我想打印出一个整数类型变量,其值为3000000000;

所以我编写了下面的代码,然后运行它,但打印值不正确。我认为变量溢出了。但我不知道为什么。

#include<stdio.h>

int main(void) {
    unsigned int num1 = 3000000000;

    printf("%d", num1);
}

据我所知,当代码符合Win32 API时,无符号整数类型变量的最大值为(2 ^ 32-1 = 4,294,967,296 - 1)。但打印值为-1294967296。

我不知道为什么我的代码中出现溢出。

如果有人知道原因,请告诉我:)

最好的祝福,

  • 我使用Microsoft Visual Studio 2015 Professional。
c integer int overflow unsigned
1个回答
1
投票

使用%u而不是%d

对于printf

%d用于:

d,i int参数转换为带符号的十进制表示法。精度(如果有)给出必须出现的最小位数;如果转换后的值需要较少的数字,则在左侧用零填充。默认精度为1.当使用显式精度0打印0时,输出为空。

%u用于:

o,u,x,X unsigned int参数转换为无符号八进制(o),无符号十进制(u)或无符号十六进制(x和X)符号。字母abcdef用于x次转换;字母ABCDEF用于X转换。精度(如果有)给出必须出现的最小位数;如果转换后的值需要较少的数字,则在左侧用零填充。默认精度为1.当使用显式精度0打印0时,输出为空。

http://man7.org/linux/man-pages/man3/printf.3.html

© www.soinside.com 2019 - 2024. All rights reserved.