我不知道在電腦中增加的過程。在一臺計算機中,爲什麼增加一個到最大整數結果爲零?
電腦如何添加兩個數字?它是電子魔法嗎?它是一種算法嗎?
此外,我想知道爲什麼加1到最大整數(... 111)導致零(... 000)? Asuming ... 111是該計算機體系結構中max int的二進制表示形式。
謝謝。
我不知道在電腦中增加的過程。在一臺計算機中,爲什麼增加一個到最大整數結果爲零?
電腦如何添加兩個數字?它是電子魔法嗎?它是一種算法嗎?
此外,我想知道爲什麼加1到最大整數(... 111)導致零(... 000)? Asuming ... 111是該計算機體系結構中max int的二進制表示形式。
謝謝。
這是在算術處理器中實現二進制補碼二進制算術整數的情況。例如浮點數並不是真的,在罕見的以其他方式進行數學運算(符號幅度表示等)的計算機上並不一定是這樣。
二進制補碼使硬件變得容易一些,比如使用相同的邏輯實現一些有符號和無符號運算。
記住,價值1111 ... 1111表示-1下補,並且要-1遞增至0
1111111..111變爲零「自然」。當你加1時,一個1的進位在數字中傳播,導致每個數字變爲0,然後它執行數字(丟棄它或者用來設置溢出指示)。
它並不總是導致0。如果您正在使用的最代表性的有符號整型,你最終會與最低值,從(比方說)
01111111 (127)
10000000 (-127)
去
在某些體系結構上(至少在某些模式下),這種溢出並沒有給出值,它會導致錯誤。當它確實給出一個值,它基本上仍然只是二進制計數。想象一下,你有一個8位無符號整數......最後幾值將是
11111100
11111101
11111110
11111111
那麼邏輯下一步是進入下一個位:
100000000
所以計算機有效地做到了這一點 - 但隨後拋棄了新的最高位,保持最低8位(因爲它是8位類型)。
儘管如此,您不必使用計算機即可看到這種效果。假設你在汽車裏有一個模擬里程錶 - 那種有幾個「車輪」的那種。當你到達其範圍的終點,它只是包裝輪:
99997
99998
99999
00000 // Overflow!
另外的過程是硬件相關的,在CPU中進行ALU。 加1到最大整數將導致爲零 由於在二進制系統中加1到1會導致零和1加到下一個數字 因此,加1到11111 1 + 1 = 0和1移到下一個數字等等
這是一個很好的答案。雄辯,很好的解釋,並且仍然很容易理解。做得好。 – bos 2012-03-13 07:46:12
+1里程錶示例:-) – xanatos 2012-03-13 08:02:00
喬恩Skeet的答案只是真棒,總是 – Thor 2016-09-27 02:02:04