簡體   English   中英

找出負數和正數二進制數之間的差異

[英]Finding the difference between a negative and positive binary Number

我知道我們可以用多種方式表示二進制數,但我真的不確定如何區分正二進制數和負數。

如果我們有數字+13 ,那么它的二進制表示如下: 1101

它的負面表現是這樣的:

11101

我的理解是,如果您需要區分它們,那么0在數字+13中的存在很重要:

01101

即便如此,我仍然無法區分:

11101 ///Here is the representation of -13

和:

11101 ///Here is the representation of +29

我知道這里使用了另一種稱為“二進制補碼”的方案,我需要應用它。

我如何區分這兩種二進制表示形式?

就像其他人說的那樣,這個問題我可以區分這兩種二進制表示形式沒有任何意義。 位序列是中性的,將其轉換為數字時,將對給定表示進行轉換。 它可以表示一個int ,一個unsigned int ,一個float或任何您想要的東西。 就像我問你是什么硬幣 ,這個詞在英語和法語中存在(至少是?),其含義完全不同(法語單詞coin表示英語中的 ),要回答我,您需要選擇一種語言,您將無法回答。

關於“二進制補碼”,它是與我們的CPU中用於更改signed int的符號的標准表示方式兼容的方式。 一個補碼是將所有0都替換為1,將所有1都替換為0, 第二個補碼是將1加上前一個結果。

假設該字具有5位,則int值13的二進制值為01101。 如果我們要-13,則13的第一個補碼為10010,加1則為10011。

但是仍然有5位字, 無符號int的 10011對應於值19。

對於5位整數 ,如果我們嘗試更改其符號,則較低的負數根據定義為10000:第一個補碼= 01111,加1 = 10000! 實際上有一個溢出,5位是不夠的。

基於上下文,相同的位序列可能具有根本不同的含義。

整數類型具有固定的位數-C語言定義要求帶符號的int類型必須至少能夠表示范圍[-32,767...32,767] ,這意味着int必須至少為 16位寬1

有幾種不同的方式來表示有符號整數。 最常見的是2的補碼,但是某些架構可能使用1的補碼或符號幅度。

要在2的補碼上翻轉符號,請按位取反並加1(此示例假定8位整數):

00001101 == 13
11110010 + 1 == 11110011 == -13

11110011 == -13
00001100 + 1 == 00001101 == 13

2的補碼的主要優點之一是您具有0的單一表示形式,並且為您提供了稍寬的值范圍- [-2 n-1 ..2 n-1 -1] - [-2 n-1 ..2 n-1 -1]

要在1的補碼上翻轉符號,只需執行按位取反操作即可:

00001101 == 13
11110010 == -13

11110010 == -13
00001101 == 13

隨着1的補,你有積極和消極的表示,0 - 0000000011111111 - ,范圍為[-2 n-1 -1..2 n-1 -1]

使用符號幅度時,將值位保持不變,並翻轉符號位:

00001101 == 13
10001101 == -13

像1的補碼一樣,您將獲得正負0000000010000000兩種編碼。

無符號整數類型與有符號整數具有相同的寬度,其范圍為[0..2 n -1]

因此,位序列11110011可以表示2的補碼中的11110011的補碼中的-12,符號幅度為-115或243無符號。


  1. 請注意,某些體系結構可能會使用填充位,因此需要超過16位才能表示32,767。

二進制值對編碼開放。

1101

沒有編碼符號位時, 1101 2的值為13 10

當使用符號位時, 寬度 N也很重要。
N > 4 ,使用2的補碼1的補碼符號幅度 ,該值仍為13 10

11101

如果將11101 2保存在大小為5或更大的unsigned字段中,則值為29 10

如果將11101 2保存在5位帶signed int字段中,則該值取決於int編碼(肯定是2的補碼)。

2的補碼:-3 10
1的補碼:-2 10
信號幅度:-13 10 (顯然是OP的初始視圖)

假設您有 5 位計算機。 5 位分為 1 個符號位 + 4 個數字位。 限制是 2^4-1 到 -2^4,即 15 到 -16。 13=01101 -13= 10010:2的補碼表示。 它不會是 18,因為 18 不適合該范圍。

暫無
暫無

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

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