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