簡體   English   中英

通過查看二進制形式來識別正數和負數

[英]Identifying positve and negative numbers by looking at it's binary form

編程世界的新手,我正在閱讀Java 開頭的其中一章:完整參考,這是按位運算符,這本書解釋了如何存儲負數。 它說,例如 -42 表示通過反轉 42 的所有位,即 00101010,產生 11010101 然后加 1 最后得到 11010110。它說由於同樣的原因沒有-0因為它不能按原樣存儲100000000 將超過 1 個字節中要存儲的容量。

我唯一不明白的是計算機如何理解它是有符號數還是無符號數,因為雖然 11010101 是 -42,但它也可以是 213。

如果您不說明正在使用的數字表示系統,則無法通過查看位模式來判斷位模式是負數還是正數。 (明顯地!)

但是如果你在談論二進制補碼整數並且你知道哪一位是最重要的一位,那么正數的最高有效位為 0。

例如:

  • 假設11010110是一個8位二進制補碼,最左邊的位是最高位,則代表負數。

  • 但是如果 11010110 實際上是 16 位數字 0000000011010110 的最低有效 8 位,那么代表一個正數。

如您所見,了解您正在使用的數字表示方案中有多少位非常重要!


它說由於同樣的原因沒有-0,因為它不能存儲,因為它是 100000000。

好吧……有點。 一個更好的理由是 N 位二進制補碼表示具有從 -2 N-1到 +2 N-1 - 1 的值。如果你計算它們,在該范圍內恰好有 2 N個值,沒有空間給 -0價值。

如果你真的想正確地理解這些關於數字表示的東西,你還需要理解二進制補碼與其他表示有符號整數的方式的關系; 請參閱帶符號的數字表示

值得注意的是,現代計算機硬件僅使用 2 的補碼表示 integer。 處理不同的 -0 和 +0 值會使硬件和軟件的事情變得復雜。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM