[英]signed two's complement arithmetic
我在考慮數據類型范圍,出現了一個問題。 我們知道簽名char的范圍是從-128到127.我得到了127的結果,即0111111 = +127
但我無法得到-128如何來? 如果我們只是ON符號位,我們得到11111111,它是如何等於-128?
大多數情況下,計算機使用所謂的2的補碼來表示有符號整數。
2的補碼方式是可能的值在一個巨大的循環中,從0到MAX_VALUE,到MIN_VALUE,到零,依此類推。
因此,最小值是最大值+1 - 01111111 = 127
,並且10000000 = -128
。
這具有與無符號算術完全相同的良好屬性 - 如果我想做-2 + 1
,我有11111110 + 00000001 = 11111111 = -1
,使用與無符號加法相同的硬件。
低端有一個額外值的原因是我們選擇將高位設置的所有數字都設為負數,這意味着0取值為正值。
在二進制補碼中 ,-128是10000000。
負數將符號位設置為1; -128
是設置符號位但沒有其他位的值(即,它是最小的負數)。 -128
的二進制表示為10000000
。 對於其他數據長度,二進制補碼中的最小負數始終為1000...
對於正確的零數。
想到這一點的一個簡單方法是從01111111開始,然后繼續減去1,直到它回繞; 前一個值是最小的負值。 使用標准“借用”技術從00000000減去1得到11111111,這實際上是-1的二進制表示。 我們可以繼續減去10000000,即-128,然后再減去一個產量01111111,包圍。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.