2012-03-13 13 views

回答

0

這是在算術處理器中實現二進制補碼二進制算術整數的情況。例如浮點數並不是真的,在罕見的以其他方式進行數學運算(符號幅度表示等)的計算機上並不一定是這樣。

二進制補碼使硬件變得容易一些,比如使用相同的邏輯實現一些有符號和無符號運算。

記住,價值1111 ... 1111表示-1下補,並且要-1遞增至0

1111111..111變爲零「自然」。當你加1時,一個1的進位在數字中傳播,導致每個數字變爲0,然後它執行數字(丟棄它或者用來設置溢出指示)。

4

它並不總是導致0。如果您正在使用的最代表性的有符號整型,你最終會與最低值,從(比方說)

01111111 (127) 
10000000 (-127) 

在某些體系結構上(至少在某些模式下),這種溢出並沒有給出值,它會導致錯誤。當它確實給出一個值,它基本上仍然只是二進制計數。想象一下,你有一個8位無符號整數......最後幾值將是

11111100 
11111101 
11111110 
11111111 

那麼邏輯下一步是進入下一個位:

100000000 

所以計算機有效地做到了這一點 - 但隨後拋棄了新的最高位,保持最低8位(因爲它是8位類型)。

儘管如此,您不必使用計算機即可看到這種效果。假設你在汽車裏有一個模擬里程錶 - 那種有幾個「車輪」的那種。當你到達其範圍的終點,它只是包裝輪:

99997 
99998 
99999 
00000 // Overflow! 
+0

這是一個很好的答案。雄辯,很好的解釋,並且仍然很容易理解。做得好。 – bos 2012-03-13 07:46:12

+0

+1里程錶示例:-) – xanatos 2012-03-13 08:02:00

+0

喬恩Skeet的答案只是真棒,總是 – Thor 2016-09-27 02:02:04

0

另外的過程是硬件相關的,在CPU中進行ALU。 加1到最大整數將導致爲零 由於在二進制系統中加1到1會導致零和1加到下一個數字 因此,加1到11111 1 + 1 = 0和1移到下一個數字等等

相關問題