任何int
數據類型(不包括tinyint
)的上限始終小於下限的絕對值。爲什麼有一個比正整數更多的負整數?
例如,int
的上限是2,147,483,647,ABS(下限)= 2,147,483,648。
是否有一個原因,爲什麼總是會有一個負int比正int?
編輯:既然問題改變的是沒有直接關係的DB的
任何int
數據類型(不包括tinyint
)的上限始終小於下限的絕對值。爲什麼有一個比正整數更多的負整數?
例如,int
的上限是2,147,483,647,ABS(下限)= 2,147,483,648。
是否有一個原因,爲什麼總是會有一個負int比正int?
編輯:既然問題改變的是沒有直接關係的DB的
您提供的是符號整數類型。我們來看一個字節(8位)的例子。用1個字節你有2^8
組合,它給你256個可能的數字來存儲。
現在你想要有相同數量的正數和負數(每組應該有128個)。
要點是0
沒有+0
和-0
。只有一個0
。
所以你最後的範圍是-128..-1..0..1..127
。
相同的邏輯適用於16/32/64-bit
。
編輯:
爲什麼範圍-128 to 127
?
這取決於你如何represent signed integer
:
這並不完全解釋爲什麼範圍不是-127 - 128. –
謝謝lad2025,在閱讀完補語 –
這個問題是不是真的涉及到數據庫。
正如lad2025指出的那樣,存在偶數個值。所以,通過包含0,就會有一個正值或負值。你所問的問題似乎是:「爲什麼有一個比正值更多的負值?」
基本上,原因是符號位。負數的一種可能的實現方式是使用n-1位作爲絕對值,然後使用0和1作爲符號位。這種方法的問題是它允許+0和-0。這是不可取的。
爲了解決這個問題,計算機科學家設計了帶符號整數的二進制補碼錶示法。 (Wikipedia explains this in more detail。)基本上,這種表示保持了可以測試的符號位的概念。但它改變了表示。如果+1表示爲001,那麼-1表示爲111.也就是說,負值是正值減一的按位補碼。實際上,負總是通過減1和使用逐位補碼產生的。
問題是值100(後面跟着任意數量的零)。符號位被設置,所以它是負的。但是,當你減1並反轉時,它又變成了自己(011-> 100)。有一種說法叫做「無限」或「不是數字」。相反,它被分配最小的可能的負數。
後,我明白了原因。感謝Gordon的幫助,我在閱讀Wiki後瞭解它。我認爲你的意思是-1表示爲111,二進制補碼0全爲0,這就是爲什麼有一個負值比正值多一個原因。再次感謝! –
@MarkHe。 。 。非常感謝你。我從記憶中寫下了原文,自從那些計算機科學課程以來,這已經有一段時間了。我確定了答案。 –
因爲0沒有'+0和-0'。 2^32是偶數。你有一個0,所以你有2^31-1這是奇怪的。你不能走負面和相同的長度 – lad2025
https://en.m.wikipedia.org/wiki/Two%27s_complement –