C编程-未签名的int溢出问题

时间:2019-03-11 07:18:00

标签: c integer int overflow unsigned

我想打印出一个整数类型变量,其值为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专业版。

1 个答案:

答案 0 :(得分:1)

使用%u而不是%d

对于printf

%d由以下人员使用:

  

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

%u由以下人员使用:

  

o,u,x,X                 unsigned int参数将转换为unsigned八进制(o),                 无符号十进制(u)或无符号十六进制(x和X)                 tion。字母abcdef用于x转换;让                 ABCDEF TER用于X转换。精度,如果                 任何,给出必须出现的最小位数;如果                 转换后的值需要较少的数字,将其填充在                 左为零。默认精度为1。当0为                 以明确的精度0打印,输出为空。

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