簡體   English   中英

用二進制表示負數

[英]Representation of negative numbers in binary

我正在研究 C 中的不同數據類型。在我的書中,有符號的 char數據類型是1 byte(8 bits) 現在,寫的是可以存儲在signed char數據類型中的ASCII碼范圍是從-128到127

有人寫道,負數存儲為其二進制的2 的補碼

我無法理解如何在8 位內存儲-1282 的補碼形式?

首先,我們需要9 位來編寫+128的有符號二進制表示,即010000000 。現在,如果我們采用它的2 的補碼形式,我們得到110000000 ,它也是9 位長。 那么我們如何能夠將 -128 存儲在8 位有符號字符中呢?

您可以將 -128 存儲為 1000 0000。

第一個 1 表示您使用的是負數,然后,根據我的學習方式,您將 0 視為 1,反之亦然,最后加 1。這意味着對於您的情況,您將執行以下操作步驟(當第一個數字是 1 時):

  1. 以帶符號的字符:1000 0000。
  2. 去掉第一個數字並切換其他數字:111 1111。
  3. 以“簡單”二進制計算值:在本例中為 127。
  4. 加 1,然后加負號:-128。

重要的是要考慮到所有負數都被計算為“倒數”:

  • -1 十進制寫為 1111 1111
  • -2 十進制寫為 1111 1110
  • -3 十進制寫為 1111 1101
  • -4 十進制寫為 1111 1100
  • 等等。

這意味着您有 128 個可能的值,但由於您不必包括小數 0(因為它表示為 0000 0000),您的負范圍是 [-1, -128],而另一方面,范圍是[0, 127]。

暫無
暫無

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

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