1. 程式人生 > >二進位制(原碼、反碼、補碼)(轉載)

二進位制(原碼、反碼、補碼)(轉載)

前言:
bit(位):資料儲存的最小單元。在計算機二進位制系統中,位,簡記為b,也稱為位元(bit),每個二進位制數字0或1就是一個位(bit),其中每 8bit = 1 byte(位元組);
Java 中的int資料型別佔4個byte(位元組),而1 byte(位元組) = 8 bit(位);(說白了,在二進位制系統中是以bit 作為資料儲存單元的)

二進位制
二進位制在計算機技術中廣泛應用。二進位制數用0和1兩個數字及其組合來表示任何數,二進位制的進位規則是:“逢2進1”。數字1在不同的位上代表不同的值,按從右至左
的次序,這個值以2倍遞增。

無符號數和有符號數
在計算器中參與運算的數有兩大類:無符號數和有符號數
(1)有符號數:
對於有符號數而言,符號的正、負機器是無法識別的,但由於“正、負”恰好是兩種截然不同的狀態,如果用“0”表示“正”,用“1”表示“符”,這樣符號也被數字化了,
並且規定將它放在有效數字的前面,即組成了有符號數。所以,在二進位制中使用最高位(第一位)來表示符號,最高位是0,表示正數;最高位是1,表示負數。
(2)無符號數:
無符號數是針對二進位制來講的,無符號數的表數範圍是非負數。全部二進位制均代表數值(所有位都用於表示數的大小),沒有符號位。即第一個”0”或”1”不表示正負。

例子:
(1)在Java中int資料型別是怎麼在計算機中表示的呢?
     在二進位制系統中是以bit(位)來作為資料儲存單元的(詳細內容請看前言),假設 int  number = 1 ,那麼number在計算機系統中將表示如下:
     00000000  00000000  00000000  00000001
     同理可得,number=-1 時,在二進位制中表示如下:
     10000000  00000000  00000000  00000001
     注意:最高位(第一位)是符號位,因為是number值為1是一個正數,所以最高位為0;

二進位制中的原碼、反碼、補碼
對於有符號數而言:
(1)二進位制的最高位是符號位:0表示正數,1表示負數
(2)正數的原碼、反碼、補碼都一樣;
(3)負數的反碼 = 它的原碼符號位不變,其他位取反(0 ->1 ; 1->0 );
(4)負數的補碼 = 它的反碼 +1, 注意反碼 +1是指最後一位+1如果是小數則是小數的最後一位,例如:
X=-0.1011 系統要是規定為8位,那麼它的原碼、反碼、補碼分別為:
[x]原=1.1011000 [x]反=1.0100111 [x]補=1.0101000


(5)0的反碼、補碼都是0;
(6)在計算機運算的時候,都是以補碼的方式來運算的;

  例子:
  下面我們就使用“有符號數”來模擬一下,在計算機中是怎樣運算的。
  (1)正數相加:
       例如:1+1 ,在計算機中運算如下:
       1的原碼為:
       00000000  00000000  00000000  00000001
       因為“正數的原碼、反碼、補碼都一樣”,所以,1的補碼 = 1的原碼,所以 1的補碼+ 1的補碼 就等於:
       00000000  00000000  00000000  00000001
       +
       00000000  00000000  00000000  00000001
       =
       00000000  00000000  00000000  00000010
       00000000  00000000  00000000  00000010( 轉換為10進位制) = 0*2^0 + 1*2^1 = 0 + 2 =2 
  (2)正數相減:
       例如:1-2,在計算機中運算如下:
       在計算機中減運算其實是作為加運算來操作的,所以,1-2 = 1 + ( -2 )
       第一步:把 1補碼找出來(因為正數的原碼、反碼、補碼都一樣,所以我們可通過原碼直接獲取補碼):
         1的補碼:
         00000000   00000000   00000000   00000001
       第二步:把-2的原碼找出來:
         -2的原碼:
         10000000   00000000   00000000   00000010
       第三步:把-2的反碼找出來:
         -2的反碼:
         11111111     11111111     11111111     11111101
       第三步:把-2的補碼找出來:
         -2的補碼:
         11111111     11111111     11111111     11111110
       第四步:1的補碼與-2的補碼相加:
          00000000   00000000   00000000   00000001
          +
          11111111     11111111     11111111      11111110
          =
          11111111     11111111     11111111      11111111
       第五步:將計算結果的補碼轉換為原碼,反其道而行之即可(如果想將二進位制轉換為十進位制,必須得到二進位制的原碼)
          補碼:11111111     11111111     11111111      11111111
          =
          反碼:11111111     11111111     11111111      11111110
          =
          原碼:10000000  00000000   00000000    00000001
      第六步:將計算結果的二進位制原碼 轉換 為十進位制
          二進位制原碼:10000000  00000000   00000000    00000001  =  1*2^0 =  -1

JAVA中所有的數字變數都是有符號(正負)的?
這句話,還有點爭議。在Java中char型別是:16位Unicode字元,取值範圍 0 ~ 65535 , 不存在負數範圍,從這點上說:”char型別就是一個
無符號數”;

注意點:
(1)正數的原碼、反碼、補碼都一樣;
(2) 如果想將 二進位制 轉為 十進位制,必須使用 二進位制的原碼;

相關推薦

二進位制(補碼)轉載

前言: bit(位):資料儲存的最小單元。在計算機二進位制系統中,位,簡記為b,也稱為位元(bit),每個二進位制數字0或1就是一個位(bit),其中每 8bit = 1 byte(位元組); Java 中的int資料型別佔4個byte(位元

regularized logisitic regssion練習轉載

method open lose hold on update import 等高線 algo 2個 轉載鏈接:http://www.cnblogs.com/tornadomeet/archive/2013/03/17/2964858.html 在上一講Deep learn

二進位制補碼和程式超出整型限制時的運算

二進位制的原碼、反碼、補碼和程式超出整型限制時的運算 1.二進位制的原碼、反碼和補碼運算      原碼錶示法:原碼錶示法是機器數的一種簡單表示法。其符號位用0表示正數,用1表示負數,數值一般用二進位制形式表示。原碼在進行加減法運算時,符號位不能直接參與運算,而

計算機中二進位制補碼的計算

計算機中原碼、反碼、補碼 正數的 原碼 = 反碼 = 補碼 負數 反碼 = 數的絕對值按位取反(最高位符號位除外)          補碼 = 反碼 +1 已知負數補碼求原碼 補碼取反(最高位符號位不取反)+1 = 原碼  (負數補碼的補碼=原碼)*取反的時候,最高位符號位

正確的理解二進位制補碼運算_01

原碼:計算機只能識別0和1,使用的是二進位制。數值有正負之分,計算機就用一個數的最高位存放符號(0為正,1為負),這就是機器數的原碼了。下面的例子都假設字長為8個bits。假如採用原碼來計算:    (1) + (1)    //原碼計算=(0000 0001) + (000

二進位制補碼詳解

①  原碼:   原碼是指將最高位作為符號位(0表示正,1表示負),其它數字位代表數值本身的絕對值的數字表示方式。   例如:數字6 在計算機中原碼錶示為:0 000 0110   其中,第一個數字0是符號位,0表示正數,0 000110是數字6的二進位制資料表示。   數

關於補碼二進位制左移的問題

2018.4.18 在今天的演算法學習過程中,關於求一個數的二進位制中1的個數(負數用補碼錶示),需要注意一個原數是真值,碼是二進位制的值,不存在正負號,正數的反碼補碼與原碼一致,負數的反碼是在原碼的基礎上除符號位全部取反,補碼是在反碼的基礎上再最後一位加1,例如:-10   

機器數的補碼錶示以及浮點數的二進位制表示

初學計算機組成原理時,有點兒搞不清楚機器數的各種表示方法。今天在這裡總結一下,希望對大家有幫助。 首先明確兩個概念,機器數是指將”+”和”-“數字化的數,其中用”0”表示”+”,”1”表示”-“。而對

負數在計算機中的二進位制表示補碼

1 符號位   C語言規定,把記憶體的最高位作為符號位,且用0表示正數,用1表示負數。 2 在計算機中,負數以其正值的補碼形式表示 2.1 原碼   一個整數,按照絕對值大小轉換成的二進位制數,稱為原碼。 如 00000000 000000

二進位制補碼以及Java中的<< 和 >> 和 >>> 詳細分析

## 1、計算機二進位制系統中最小單位bit > 在計算機二進位制系統中: > bit (位) :資料儲存的最小單元。 簡記為`b`,也稱為位元(`bit`),每個二進位制數字0或1就是一個位(`bit`),其中,每 `8bit = 1 byte`(位元組); > 再回顧Java 中的

二進制的補碼及相關計算

pan pre 計算機 php 位運算 log 其他 說明 符號 1.二進制的最高位是符號位,0表示正數,1表示負數2.正數的原碼、反碼、補碼都一樣3.負數的反碼=它原碼符號位不變,其他位取反(0->1,1->0)4.負數的補碼=它的反碼+15.0的反碼、補碼、

補碼和移

color 保存 eight png logs 按位取反 編碼表 log 轉換成   在計算機中所有的數據的保存均是用二進制來實現的,而二進制的表示則是一串的0,1組成。而在計算機的表達中有著機器數和原碼,反碼,補碼和移碼等數據的編碼表示方法。其中這些編碼的方法稱為碼制。

補碼真值及(8C5A3E00)16計算

原碼、反碼、補碼、移碼、真值(及(8c5a3e00)16計算)真值: 符號位 + | X | 一般 0 正 1負 負數: -8 二進制8位表示: 1)真值 X:- 1000 2)原碼:1 0001000 3)反碼:1 1110111(符號位不變,其余位取反) 4)補碼:

補碼之間的關系和轉換

span 數值 一個 寄存器 如果 有符號數 pan 關系 style 在計算機中參與運算的數有兩大類:無符號數和有符號數。無符號數,即沒有符號的數,在寄存器中的每一位均可用來存放數值;而有符號數,則需要留出位置來存放符號。以機器字長為8位為例,無符號數表示的範圍是0~25

Java:二進制補碼與位運算

無符號 位與 轉換成 轉換 不同 一個 位或 其他 log 一、二進制(原碼、反碼、補碼) 二進制的最高位是符號位(“0”代表正數,“1”代表負數); Java中沒有無符號數; 計算機以整數的補碼進行運算; 1. 原碼:將一個整數轉換成二進制表示 以 int 類型為例

補碼 詳解

blog 應該 符號 order 感覺 最小值 而是 們的 有符號 作者:張子秋出處:http://www.cnblogs.com/zhangziqiu/ 本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法

(轉)C語言之補碼

計算機 進制 情況下 class 正數 去掉 都是 OS 原碼 原碼、反碼和補碼 1).數據在內存中存儲的時候都是以二進制的形式存儲的. int num = 10; 原碼、反碼、補碼都是二進制.只不過是二進制的不同的表現形式. 數據是以補碼

數的補碼表示

height 轉換 img 常見 相互轉換 9.png div 小數 正數 1.原碼、反碼、補碼的定義     對於n+1位機器數,       x, x為正數 x,

位運算符按位與按位或按位非左移右移補碼

位運算符 位數 是我 計算機 基礎上 個數字 部分 普通 bsp 位運算符的基本規則1,位運算符都是針對整數的二進制數字形式而進行的。2,按位與運算基本規則(規則表):1 & 1 ==> 11 & 0 ==> 00 & 1 ==>

補碼的理解與思考

原碼 反碼 補碼 原碼、反碼、補碼都是二進制表示數的方式 原碼原碼:首位為符號位,0表示整數,1表示負數,其余位表示數值,例如0011表示+3,而1011表示-3。優點:符合人類閱讀習慣,無論正數負數都能馬上讀出來缺點:計算機做運算的時候不會把符號位提取出來,然後單獨計算數值位的,而是把整個數包括