关于-32768补码的问题
首先要知道的是計算機中補碼的表示是唯一且連續的!我想這是計算機為什么不用原碼來表示的一個原因!另外,以補碼形式來運算的話,設計的邏輯電路會簡單很多,會少很多邏輯運算器件,所以計算機采用補碼的形式來運算。
比如說:0的原碼有兩種
+0 = 00000000 00000000;
-0 = 10000000 00000000;
而補碼只有一種:00000000 00000000;
怎么求補碼呢!最簡單的是符號位不變其他位換號再加1;注意:加1的時候符號位參與運算,如果最高位有溢出則舍去!
例: - 0的補碼:
原碼:10000000 00000000
符號位不變其他位換號:11111111 1111111
加1:
11111111 11111111
+00000000 00000001
= (1)00000000 00000000
(1)被舍去。
我們知道,16位二進制數可以表現2的16次方個編碼,而在補碼中零的編碼只有一個,也就是補碼中會比原碼多一個編碼出來,這個編碼就是1000000000000000,因為任何一個原碼都不可能在轉成補碼時釀成1000000000000000。
所以,人為規定1000000000000000這個補碼編碼為 - 32768。所以,補碼系統中,范圍是 - 32768~32767。
因此,實際上,二進制的最小數確實是1111111111111111,只是二進制補碼的最小值才是1000000000000000,而補碼的1111111111111111是二進制值的 - 1。
而 - 32768的補碼:因為16位的話,在計算機中 - 32768不能用原碼表示出來。所以只能通過 - 32767 - 1來求:
-1的補碼為11111111 11111111
-32767的補碼為10000000 00000001
所以加起來為:(1)1000000 00000000 (1)被舍去了。
又因為10000000 0000000沒有用來表示其他任何數,所以10000000 00000000就被用來表示 - 32768,這也驗證了補碼的唯一性和連續性!而且這也證明了16位的整數的范圍是“ - 32768~32767”。不過16位整數的原碼的范圍只有:“ - 32767~32767”。
總結
以上是生活随笔為你收集整理的关于-32768补码的问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++,Java编程空指针的一个小细节
- 下一篇: 如何找到Eclipse左侧项目栏