數制:二進制數(B)、十進制數(D)、八進制數(O)、十六進制數(H)
碼制:8421BCD碼、5421BCD碼、2421BCD碼、餘三碼、格雷碼(又稱循環碼)
常見的數制為二進制數和十進制數。要想了解數制我們必須掌握進制直接的轉換。
1、數制之間的轉換
(1)關于二進制的一些概念
這裡主要記錄一下位、比特對于二進制的描述,是比較基礎的東西。
位寬/比特:一個二進制數,有它的位寬,有多少個0/1,它位寬就是多少;比如二進制數10110,它的位寬就是5,從第0位到第4位;也說這是一個5位寬的二進制數,或者說這個二進制數寬度大小是5比特,數值大小為22(默認數值大小一般說的是十進制的數值大小)。
最高位和最低位:對于上面的10110,最高位是1,最低位是0;最高位是第4位,最低位是0
(2)二進制轉換成十進制:
①二進制轉換成十進制方法為:把二進制數按權展開、相加即得十進制數。
②舉例:二進制數10011.01,位數為1的有第4位,第1位,第0位,第-2位,那麼就有:
10011的十進制數值(注意說到數值,默認是轉換為十進制時數的大小)為:2^4 2^1 2^0 2^(-2) = 19.25
十進制轉換成二進制:
①轉換方法就是:整數部分,除二取餘;小數部分,乘二取整(小數部分一般會說明要精确到小數點多少位)。
②舉例說明:将35.63轉換成二進制數,小數部分精确到小數點後3位
那麼對于整數部分,除二取餘:
二進制轉十進制整數部分示例
整數部分的二進制數就是100011。
對于小數部分:乘二取整
0.63*2 = 1.26,取1;0.26*2 = 0.52,取0;0.52*2 = 1.04,取1;已經達到三位了。因此小數部分就是101
因此35.63的二進制表示為100011.101。
(3)二進制轉換成八進制:
①方法:從小數點向兩邊展開,每三位二進制劃分為一組,每一組的的十進制就是對應的八進制,(注意,最高位或者最低位不夠3位要補0)。
②舉例:1001.01轉換成八進制,進行分組 (00)1 001 . 01(0),轉換成八進制就是11.2。
八進制轉換成二進制:
①八進制轉換成二進制的方法跟二進制轉換成八進制的方法相反,一位八進制對應三位的二進制,依次展開就可以。
②舉例:八進制67.21轉換成二進制,6是110,7是111,2是010,1是001;所以對應的二進制就是110111.010001。
(4)二進制轉換成十六進制,十六進制轉換成二進制:
二進制轉換成十六進制/十六進制轉換成二進制與八進制的類似,隻不過是八進制對應的是3位,而十六進制對應的是4位;這裡不再詳述。
它們之間的轉換都可以通過二進制進行。
(1)無符号數,也就是沒有正負之分,默認為正值,上面說到的都是正數,也就是無符号數。對于二進制也是這樣。
·一般情況下,沒有專門指出這個數是有符号的,就默認是無符号的數。
·n位無符号可以表示的範圍位0~ (2^n-1),即0~1...1
(2)有符号數,顧名思義就是有正負之分,比如 39,-49。對于二進制數而言,也有有符号數之分。以後我記錄的說到有符号數的,默認指有符号數的二進制數。
①在有符号的二進制數中,最高位表示符号位,其他位表示數的其他内容;其中符号位是1時,表示這個有符号的二進制數是負數;符号位是0時,表示這個有符号的二進制數是正數。
比如有符号數10010,最高位是1,表示這個二進制數是負數。
·從前面上述可以知道,一個有符号的二進制數,至少有兩位,其中一位是符号位。
②有符号二進制數有三種表達方式:原碼、反碼、補碼(十進制之類的也有補碼之類的,這裡僅僅記錄與二進制有關的)。
③原碼:符号位 剩餘二進制表示。最高位是符号位,除最高位後的二進制數,表示二進制數值的絕對值大小。
比如原碼100110,最高位是1,表示負數;剩餘是00110,表示的數值大小是6,那麼這個原碼表示的數值大小就是-6 。
·一般情況下,說到是有符号數,一般指的是原碼。
·原碼的0,可以表示為 0和-0,也就是1...0,0..0,因此有兩種表達形式。
·n位原碼表示的範圍為:-(2^(n-1)-1)~ (2^(n-1)-1),即1...1~0...1
④反碼:符号位 剩餘二進制表示。最高位也是符号位,除符号位的二進制數值與符号位有關,符号位是0,表示這個編碼的是正數,除符号位剩下的就表示數值絕對值大小。若符号位是1,則除符号位剩下位數取反後,表示的才是數值絕對值大小。
比如一個有符号數的反碼是10011,則有:首位是1,表示這個是負數,剩餘位是0011,取反後是1100,所以絕對值大小是12,因此10011是十進制數-12的反碼表示。
·反碼在應用不多,也許是我還沒有了解到吧,在此不詳述,以後用到了再詳述記錄吧。
⑤補碼:符号位 剩餘二進制表示。補碼的應用就廣泛了,計算機的内部運算就是用補碼的。
補碼也可以由原碼得來:
對于正數:二進制數值的絕對值即為補碼;
對于負數:原碼的符号位不變,剩餘位取反,然後整體加一就得到了補碼。
比如:二進制的原碼是10010,符号位1不變;剩餘0010,取反得1101;整合為11101,加一得到11110.也就是原碼是10010的補碼為11110 。
·補碼的0,假設有4位,那麼對于-0,原碼是1000,進行取反加一後,得到0000(假設位寬固定);對于 0,補碼也是0000;因此補碼的0隻有一種表達形式。
·n位補碼表示的數值範圍為:-2^(n-1)~ (2^(n-1)-1)
3、二進制的加減運算與溢出現象
(1)二進制的加減運算
①對于一般的無符号運算,直接運算就好了,沒什麼可以說的。但是計算機内部,它是用補碼運算的,這就有可以記錄的地方了,補碼的加減運算對于其他的有符号數,就顯得比較簡單了。此外,減法也可以當成加法來,減一個數可以當成加這個數的負數。
②對于補碼的加法運算有:補碼 補碼 = 補碼。當然這個是有一定的條件的,下面舉例探讨。
③例一:( 3) ( 4),結果顯然是 7;用二進制補碼進行運算,則是0011 0100,得到的結果是0111,很顯然,0111是 7的補碼。
例二:(-2) -6 = (-2) (-6),結果顯然是-8;用二進制補碼進行運算,則是1110 1010 ,得到11000,這個很顯然也是-8的補碼。
例三: 6 - 3 = ( 6) (-3),結果顯然是 3;用二進制補碼進行運算,則是0110 1101,結果是10011,诶呀,這個很顯然就不是 3的補碼,但是,當我們去掉最高位後,隻看低四位0011,這個很顯然是 3的補碼呀。
例四: 4-7 = ( 4) (-7),結果是顯然是-3;用二進制補碼進行運算,則是0100 1001,得到的結果是1101,這個結果很顯然是-3的補碼。
(2)溢出現象
①經過上面的四個例子,引入溢出這個概念:如果加法操作産生的幾個超出了數制定義的範圍,就說發生了溢出。兩個異号數相加,肯定不會溢出;同号相加可能溢出。
②判斷溢出的法則:如果加數的符号相同,而和的符号與加數符号不同,則有加法溢出。
③再談前面的四個例子:
一般而言,對于位寬固定的情況下,
例一相加,得到的是4位,沒有溢出,結果也正确。
例二,雖然得到的結果正确,但是得到的結果是5位的,如果截去最高位,那麼得到結果将是錯誤的,也就是有溢出産生。這裡也提醒我們,對于同号相加,要加多一位,其實也就是加多一個進位位。
例三結果雖然是不正确的,但是這是5位的結果,我們截去最高位,這個結果是對的,因此這個沒有溢出,也就是這個結果(四位)還是對的。
例四,沒有溢出。
二、編碼
第二篇記錄一下編碼。
編碼:用于表示不同的數或其他事件的一組n位二進制碼的集合,稱為一種編碼。
碼字:一個含義确切的特定的n位組合,稱為碼字。
總之可以這麼理解,編碼就是一種表達二進制數集合的方式。
1、十進制數的二進制編碼
①十進制數的二進制編碼也就是用二進制表示10個十進制數0~9 。
②十進制數的二進制編碼方式主要有:BCD碼,也叫8421碼;5421碼;2421碼;餘3碼。下面是表格,但是這裡值簡述一下8421碼;2421碼;餘3碼。
碼制轉換表
③8421碼:如上圖所示,是最習慣用二進制表示十進制數的一種方式。最高位的值是8,次高位是4,次低位是2,最低位是1 。因此一個二進制數1001表示的數值就是1*8 1*1 = 9 。也就是按權展開就是十進制數值了。
④2421碼:數值小于等于4時,2421碼等于8421碼;數值大于4時等于8421碼加6 。
⑤餘3碼:8421碼加上0011就對應數值的餘3碼。
2、格雷碼
(1)概念:百度百科是這樣說的:在一組二進制數的編碼中,若任意兩個相鄰的二進制數隻有一位二進制數不同,則稱這種編碼為格雷碼。
·由于最大數與最小數之間也僅一位數不同,即“首尾相連”,因此又稱循環碼或反射碼。
(2)二進制與格雷碼的相互轉換:這裡的二進制不是隻BCD碼,就是自然的二進制。
①二進制轉換為格雷碼:
轉換方法:
自然二進制的最高位與格雷碼的最高位相同;然後從最低邊一位起,依次将每一位與左邊一位進行比較,相同取0,不同取1,(也就是異或運算)作為對應格雷碼該位的值。
舉例比較方便:
110010轉換成格雷碼:
過程圖:
過程圖
首先最高位是1,那麼格雷碼最高位是1;然後從最低位起跟左邊一位進行比較;
最低位是0,它的左邊一位是1,因此得到格雷碼的最低位是1;
次低位是1,它的左邊一位是0,因此得到次低位的格雷碼是1;
次次低位0,它的左邊一位是0,因此得到次次低位的格雷碼是0;
...
次高位是1,它的左邊一位是1(也就是最高位),因此格雷碼的次高位是0;
這樣就得到格雷碼:101011 。
②格雷碼轉二進制碼:
轉換方法:
這個轉換方類似,隻不過是倒着回來;同樣保留格雷碼的最高位作為自然二進制碼的最高位,而次高位自然二進制碼為最高位自然二進制碼與次高位格雷碼相異或(就是那個相同取0,不同取1),而自然二進制碼的其餘各位與次高位自然二進制碼的求法相類似。
舉例吧:把格雷碼101101轉換成二進制數:
過程圖:
過程圖
轉換過程不再詳述。
(3)格雷碼的特點:
①格雷碼屬于可靠性編碼,是一種錯誤最小化的編碼方式。
·自然二進制碼可以直接由數/模轉換器轉換成模拟信号,但在某些情況,例如從十進制的3轉換為4時二進制碼的每一位都要變,能使數字電路産生很大的尖峰電流脈沖。
·格雷碼則沒有這一缺點,它在相鄰位間轉換時,隻有一位産生變化。它大大地減少了由一個狀态到下一個狀态時邏輯的混淆。
·由于格雷碼相鄰的兩個碼組之間隻有一位不同,因而在用于方向的轉角位移量-數字量的轉換中,當方向的轉角位移量發生微小變化(而可能引起數字量發生變化時,格雷碼僅改變一位,這樣與其它編碼同時改變兩位或多位的情況相比更為可靠,即可減少出錯的可能性。
②格雷碼是一種絕對編碼方式,典型格雷碼是一種具有反射特性和循環特性的單步自補碼,它的循環、單步特性消除了随機取數時出現重大誤差的可能,它的反射、自補特性使得求反非常方便。
③格雷碼是一種變權碼,每一位碼沒有固定的大小,很難直接進行比較大小和算術運算,也不能直接轉換成液位信号,要經過一次碼變換,變成自然二進制碼,再由上位機讀取。
④典型格雷碼是一種采用絕對編碼方式的準權碼,其權的絕對值為2^i-1(設最低位i=1)。
⑤格雷碼的十進制數奇偶性與其碼字中1的個數的奇偶性相同。
3、ASCII碼
(1)簡介
ASCII(American Standard Code for Information Interchange,美國信息交換标準代碼)是基于拉丁字母的一套電腦編碼系統,主要用于顯示現代英語和其他西歐語言。它是現今最通用的單字節編碼系統。
(2)一個ASCII碼用8位二進制表示。
隻記錄這些,詳情自己百度吧。
4、其他編碼
其他的編碼,如奇偶校驗碼、循環冗餘檢驗碼(CRC)、漢明碼、二維碼、NRZ編碼、霍夫曼編碼、曼徹斯特編碼等等這些編碼在以後應用到的時候,再進行記錄。
如有補足請多多指正。感謝大家支持!!!
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!