在計算機內部都是用二進位制補碼進行運算的,忽然腦子一抽,十進位制能不能進行補碼運算呢?
首先隨便列出乙個十進位制的式子:
89-12
=77
二進位制的負數是通過取反再加一來獲得補碼的顯然,二進位制正數的原碼=反碼=補碼
89
的補碼為89
那麼-12
的補碼是多少呢?
9
減去12
的每一位數得到:87
將上面隨便寫出的式子新增上符號位
並寫成補碼
的形式,將會得到:
089+
9(87+
1)=(
10)77
結論: 十進位製取反操作->9-x 所以,二進位制的取反操作為:1-x .兩個負數相加不論是多少進製都有原碼,反碼,補碼的概念,都能用補碼進行運算 .
tips: 如果有人問-9的補碼是多少,你得回答: (1 0111)2 .
-78-
66=-144
-078
-066=-
144// 位數不足,加乙個最高位9(
921+1)
+9(933+1
)=(19
)856
// 添上符號位,按位取反,寫成補碼形式(19
)856=(
19)(143+1
)// 將補碼轉換成原碼,大功告成
為什麼二進位制的補碼是反碼加一,為什麼十進位制的補碼也是反碼加一?這有什
麼意義呢
,有什麼
意義呢?
\color
這有什麼意義
呢,有什
麼意義呢
?還記得當初你是怎麼學會減法的嗎? 現在告訴你, 你白學啦, 我們根本不需要學什麼減法 . (當然, 這只是開玩笑)
或許對日常使用十進位制,靠算數邏輯運算子+
和-
來區分正負數的人類來說, 意義並不大 .
但對乙個只懂0
和1
, 靠最高位是0
是1
來區分正負數, 加法做的很快,減法不行的傢伙來說, 意義非凡
所以, 你是做加法快呢? 還是做減法快呢?
二進位制轉十進位制
二進位制轉十進位制方法很多,如字元陣列,指標法等 下面用字串函式的方法實現 二進位制轉十進位制 主要用 到 string函式性質及pow求乙個數的n次方的函式過載 by adengou 2010.08.04 win7 dev c 5.0 vs 2010 通過 include include incl...
二進位制與十進位制
人們在生產實踐和日常生活中創造了多種表示數的方法,這些數的表示規則稱為數制。例如人們常用的十進位制 計算機中採用的二進位制等。十進位制計數法的加法規則是 逢十進一 任意乙個十進位制可用0 1 2 3 4 5 6 7 8 9十個字元的組合表示,它的基數是 10。二進位制計數法的加法規則是 逢二進一 任...
十進位制轉二進位制
includeint dg unsigned n,int c 注意 引數型別是unsigned int main 陣列全部初始化為0 printf d n sizeof int unsigned temp,u temp u 4294967295u int tu int u printf u u,tu...