二進制是由1和0兩個數字組成的,它可以表示兩種狀態,即開和關。所有輸入電腦的任何信息最終都要轉化為二進制。目前通用的是ASCII碼。最基本的單位為bit。
二進制編碼是用預先規定的方法將文字、數字或其他對象編成二進制的數碼,或將信息、數據轉換成規定的二進制電脈沖信號。
二進制編碼的優點
(1)技術實現簡單,計算機是由邏輯電路組成,邏輯電路通常只有兩個狀態,開關的接通與斷開,這兩種狀態正好可以用“1”和“0”表示。
(2)簡化運算規則:兩個二進制數和、積運算組合各有三種,運算規則簡單,有利于簡化計算機內部結構,提高運算速度。
(3)適合邏輯運算:邏輯代數是邏輯運算的理論依據,二進制只有兩個數碼,正好與邏輯代數中的“真”和“假”相吻合。
(4)易于進行轉換,二進制與十進制數易于互相轉換。
(5)用二進制表示數據具有抗干擾能力強,可靠性高等優點。因為每位數據只有高低兩個狀態,當受到一定程度的干擾時,仍能可靠地分辨出它是高還是低。
一位二進制代碼叫做一個碼元,它有0和1兩種狀態.N個碼元可以有2^n種不同的組合。
每種組合稱為一個碼字。用不同碼字表示各種各樣的信息,就是二進制編碼
5位二進制編碼開關
二進制有加減 乘除 01101+1111=? 1101-0011=?
BCD碼
BCD碼(Binary-Coded Decimal?)亦稱二進碼十進數或二-十進制代碼。用4位二進制數來表示1位十進制數中的0~9這10個數碼。是一種二進制的數字編碼形式,用二進制編碼的十進制代碼。BCD碼這種編碼形式利用了四個位元來儲存一個十進制的數碼,使二進制和十進制之間的轉換得以快捷的進行。這種編碼技巧最常用于會計系統的設計里,因為會計制度經常需要對很長的數字串作準確的計算。相對于一般的浮點式記數法,采用BCD碼,既可保存數值的精確度,又可免去使電腦作浮點運算時所耗費的時間。此外,對于其他需要高精確度的計算,BCD編碼亦很常用。
由于十進制數共有0、1、2、……、9十個數碼,因此,至少需要4位二進制碼來表示1位十進制數。4位二進制碼共有2^4=16種碼組,在這16種代碼中,可以任選10種來表示10個十進制數碼,共有N=16!/[10!*(16-10)!]等于8008種方案。常用的BCD代碼列于末。
bcd碼和二進制碼有什么區別
當用來表示十進制數字0——9時,用二進制代碼與8421BCD代碼完全相同。而當表示的十進制數字大于9時,用二進制代碼與8421BCD代碼表達就完全不同了。用二進制表示就是二進制數字安權重 求和,其值為十進制數字;用8421BCD代碼則是每一位十進制數字都用4位8421BCD代碼表示。如十進制數字15,轉化為二進制為1111;用8421BCD碼表示為0001 0101。
bcd碼和十六進制數的區別
程序如下:BINBCD:MOV B, #100 (100作為除數送入B中) DIV AB (十六進制數除以100)
MOV R3, A (百位數送r3,余數放入B中)
MOV A, #10 (分離十位數與個位數)
XCH A,B (余數放入A中,除數放入B中)
DIV AB (分離出十位在A中,個位在B中)
SWAP A (十位數交換到A的高4位)
ADD A,B (十位數與個位數相加送入 A中)
END
1 請問這個程序求解的思路是什么?
2 該程序的第二句“DIV AB”的解釋是十六進制數除以100,可是A中應該存放的是一個八位的二進制數,這是怎么回事?
3 最后為什么要十位數與個位數相加,不是要分離十位數與個位數嗎?
乘除法的時候可以不考慮進制的,比如說 #0FFH這個十六進制數 存放于A中,#100這個十進制數放于B中 然后DIV AB 這時 A等于#02H B等于#37H等于55
在然后
假設A中的數為 FFH
BINBCD:
MOV B, #100 (B=100,十進制100,)
DIV AB (A等于#02H,B等于#37H等于55)
MOV R3, A (A=02H)
MOV A, #10 (A=10=0AH,B=55=37H)
XCH A,B (A=55=37H, B=10=0AH)
DIV AB (A=05H=5 , B=5=05H)
SWAP A (A=50H,B=05H)
ADD A,B (A=55H,這時十位各位的BCD嗎已經求出來了,將 37H=55轉換為55H
END
1 請問這個程序求解的思路是什么?
思路就是對一個數求模和求于來分離百位十位和個位
例如168
168/100=1余68
68/10=6余8
8/1=8余0
這樣就分離了百位十位和個位
2 該程序的第二句“DIV AB”的解釋是十六進制數除以100,可是A中應該存放的是一個八位的二進制數,這是怎么回事?
這個是你沒理解cpu存數據的方式,A中存放的其實歸根結底說是二進制數,機器只認識二進制數,對這段程序編譯之后我們輸入的十進制100也變成二進制數了,我們通常說十六進制數是因為十六進制數和二進制數有位上的對應關系,比如1100 0110B=C6H 也就是說二進制數每4位一段各自寫成十六進制數就把二進制轉換成十六進制了。
3 最后為什么要十位數與個位數相加,不是要分離十位數與個位數嗎? 我想如果你清楚BCD碼的含義你就明白了 BCD碼就是用十六進制數來表示十進制的數
例如:45H是等于十進制的69的,但如果你說他是BCD碼他就代表十進制數45
這樣你就會發現不是每個十六進制數都是BCD碼的,例如AAH就不是BCD碼,因為沒有AA這樣的十進制數
我最后總結一下,就是我們所說的十進制數也好十六進制數也好,歸根到底機器都是要把他變為二進制數的,機器也只認識二進制數,這樣你就好理解了,我們不會處理不同進制數之間的運算,運算時必須要把他轉換同進制的數,機器也是這樣,只不過我們擅長的是十進制的運算,而機器擅長的是二進制運算,二進制數位數多不方便我們就找了一個幫手十六進制數
評論
查看更多