2011-08-13 41 views
-1

我明白b会得到一个垃圾值,但它应该在int的范围内。我错了吗?为什么int在这里给出8位数的垃圾值?

#include<stdio.h> 
    #include<conio.h> 

    void main() 
    { 
     int a = 300, b, c; 
     if (a >= 400) 
      b = 300; 
     c = 200; 
     printf("\n%d%d", b, c); 

     getch(); 
    } 

输出中的Borland C++编译器:

23603264200 
+0

你是测试如果人们可以计算出难题? – balki

回答

3

你不打印它们

B = 23603264和 C = 200之间的空间,两者都是在一个int的有效范围。

为4字节有符号整数的参考最大值为27亿左右

+0

不错的观察,我错过了 – cnicutar

+0

@cnicutar是啊,它花了我一秒钟,然后我看了一下印刷声明。 –

+1

但是你怎么能说23603264是在int的范围内。 int可以存储在16位编译器中的最大值是65536 – deepaklearner

2

当你第一次声明b,它不初始化任何价值,它只是设置为300如果a >= 400,这是不。

所以输出是真的:23603264 200

和200是c,但你没放空间,在你的输出,即printf("%d %d\n", b, c);

而且是23603264任何解释为intb是的内存。

2

让我们逐步了解您的代码。

int a=300,b,c; 

我们有三个int变量:a,设置为300,也bc,其中包含他们占据因为你没有定义它们的值存储的未知内容。除非您明确这样做,否则堆栈和堆内存不会初始化为任何特定值。

if(a>=400) 
b=300; 

如果a大于或等于400,设置b300。不挂断! a永远不会大于400,因为您将其设置为300!因此,b仍然是一些随机值。

c=200; 

设置c200

printf("\n%d%d",b,c); 

这将打印“(某个随机数字在这里)200”,两者之间没有空格。


我刚刚意识到,我没有真正回答你的问题在上面的文字。数字似乎大于int的范围的原因是因为您看到的数字实际上是bc,彼此相邻,两者之间没有空格。

1

那么,你的int是至少32位 - 在这个范围内如此23603264间的配合(从C最后200个komes这是正确初始化)