2015-04-20 20 views
2

我已經在Turbo C/C++編輯器的32位Windows 7操作系統上執行此程序。即使值越過其範圍,整型變量如何顯示正確的值?

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

void main() 
{ 
    int a,b,c,d,e; 
    clrscr(); 

    a = 25000; 
    b = 10000; 

    c = a + b; 

    printf(" The value of c = %d\n", c); 

    d = 5000; 

    e = c - d; 

    printf(" The value of e is %d\n", e); 

    getch(); 
} 

當我打印c時,得到值-30536,因爲值35000超過最大值。但是當我在表達式'e = c - d;'中使用相同的c時,我得到正確的值爲30000. 這怎麼可能?

+0

'-30536 - 5000 = 30000' –

+0

您如何證明該解決方案? –

+0

大衛..請詳細說明您的答案...如何可以-30536 - 5000等於30000? –

回答

4

讓我們踢小數點和我們的大腦,並使用二進制和CPU。 的int是這裏的16位

表達25000 + 10000(添加的二進制代碼非常簡單)

01100001 10101000 = 25000 
+00100111 00010000 = 10000 
10001000 10111000 = -30536 

10001000 10111000是其結果作爲第一個位是有符號的位,它是負30536現在

表達-30536 - 5000(-30536 +(-5000))

10001000 10111000 = -30536 
+11101100 01111000 = -5000 
01110101 00110000 = 30000 

01110101 00110000這個結果是肯定的30000

或-30536-5000你可以使用2的補碼方法來減去。我不會在這裏解釋。

+3

這兩個表達式都應該是main-return-in-c-and-c?lq = 1)是具有16位有符號整數的UB。當然你需要提到這一點。或提問者會認爲這可以依靠。 –

+0

@DavidHeffernan在您發表評論之前,我正在編輯此內容。不管怎麼說謝謝 –

+0

非常感謝你Inder,David和大家...... –