为什么int类型变量的值会被打印,即使它不在int的范围内?

时间:2016-01-29 13:18:36

标签: c int range

#include<stdio.h>
int main()
{
int a;
a=100000000;
printf("%d",a);
return(0);
}

//为什么a的值会被打印,即使它大于int的范围?

4 个答案:

答案 0 :(得分:3)

  

因为c中int类型的范围是-32767到32767

你有错误的假设。

类型x的范围已修复。 int不一定是16位。

C标准没有为int定义固定范围。它需要一致的实现支持至少 int的范围-32767到32767。但是实现可以支持更高的范围。在大多数系统上,int是32位宽。

所以输出中没有任何意外。 如果您想知道确切的限制,那么您可以使用int中的宏INT_MININT_MAX

相关的C-FAQ:How should I decide which integer type to use?

答案 1 :(得分:2)

这个数字适合32位整数,最多可以容纳2,147,483,647(签名)。

答案 2 :(得分:1)

“int”的大小可能因CPU架构而异。如果你想绝对确定你的整数使用的大小:

int32_t a;  //this is a 32bit signed integer
uint16_t b; //16 bit unsigned integer

代替。

答案 3 :(得分:0)

在C中,整数的大小可以是2,4或甚至8个字节。这可能取决于您使用的编译器以及您的系统。

  1. 如果您的处理器是16位(当然这是古代)int将是2个字节。
  2. 对于32位处理器,它大多是4个字节。
  3. 对于64位处理器,它甚至可以是8个字节。
  4. 以上在旧版编译器中都是如此。

    但事实并非如此。需要交叉编译(除其他外)以绕过主机CPU的int与目标CPU上使用的int不同。当移植代码以在多个平台上使用时,这可能会导致问题。大多数现代C编译器都允许用户更改整数的大小。