導(dǎo) 我的世界二進(jìn)制轉(zhuǎn)換BCD碼的規(guī)則是什么呢?這是很多高玩必須掌握的東西,可能很多童鞋對(duì)BCD碼并不熟悉,但大都數(shù)玩家都應(yīng)該聽說過二進(jìn)制,這之間的轉(zhuǎn)換在游戲中是非常重要的。九游小編帶來了二進(jìn)制轉(zhuǎn)換BCD碼...

我的世界二進(jìn)制轉(zhuǎn)換BCD碼的規(guī)則是什么呢?這是很多高玩必須掌握的東西,可能很多童鞋對(duì)BCD碼并不熟悉,但大都數(shù)玩家都應(yīng)該聽說過二進(jìn)制,這之間的轉(zhuǎn)換在游戲中是非常重要的。九游小編帶來了二進(jìn)制轉(zhuǎn)換BCD碼的方法,一起來看看下文吧!

我的世界二進(jìn)制轉(zhuǎn)換BCD碼的詳細(xì)教程

二進(jìn)制轉(zhuǎn)換BCD碼

二進(jìn)制轉(zhuǎn)換BCD碼

什么是BCD碼

BCD(二進(jìn)制編碼的十進(jìn)制)是一種用4位二進(jìn)制數(shù)來表示一個(gè)十進(jìn)制數(shù)的方法,一個(gè)4位的二進(jìn)制數(shù)可以表示出從0到15的十進(jìn)制數(shù),但是在BCD中,每4位只能組合出十進(jìn)制中的0到9。

兩個(gè)BCD數(shù)相加后,結(jié)果的4位數(shù)可能會(huì)出現(xiàn)不合法的值(0到9之外),這時(shí)我們得將它們加上6來修正(至于為什么是加6,后文會(huì)講),這種修正被稱作為“十進(jìn)制數(shù)調(diào)整”(感興趣的可以去搜索一下“十進(jìn)制數(shù)加調(diào)整指令”)。

如何轉(zhuǎn)換成BCD碼

二進(jìn)制轉(zhuǎn)換成BCD碼,需要用到Double Dabble算法。

實(shí)現(xiàn)方法

拿11111111來舉例子,我們先建立一個(gè)表格,把二進(jìn)制數(shù)放入右側(cè)的二進(jìn)制區(qū),然后開始運(yùn)算。

1. 當(dāng)二進(jìn)制區(qū)不為空時(shí),將內(nèi)容左移

2. 然后判斷3個(gè)BCD區(qū)中的值是否大于4

* 若是,則將單個(gè)BCD區(qū)內(nèi)的數(shù)+3處理

* 否則,不做處理

重復(fù)以上兩個(gè)操作,直到二進(jìn)制區(qū)為空(為空時(shí)立即停止操作,不用接著判斷BCD區(qū)是否大于4)

在游戲中的實(shí)現(xiàn)

1.枚舉

我們通常是通過“枚舉”的方式來實(shí)現(xiàn)的,這里說的“枚舉”并不是指把所有的結(jié)果列出來,而是把+3前后的取值枚舉出來

通過將模塊錯(cuò)位排列的方式實(shí)現(xiàn)移位操作

2.加法器

和上一個(gè)方法很相像,不過這里用到并不是枚舉模塊,而是加法器。同樣地,先是判斷是否大于4,然后用加法器來代替枚舉模塊進(jìn)行+3的操作。

總結(jié)在游戲中+3模塊的體積總是大于加法器的,常規(guī)+3模塊最低延時(shí)為2Ticks,所以第一種方法是犧牲了空間,換得了較少的延時(shí)。而第二種方法是用時(shí)間換得了較小體積(當(dāng)然,加法器的結(jié)構(gòu)不同,運(yùn)算耗時(shí)也不同,這里使用行波進(jìn)位加法器作為比較對(duì)象)。

對(duì)于+3模塊的優(yōu)化

我們先看回剛剛的對(duì)照表,可以發(fā)現(xiàn)表內(nèi)有4種情況是不用修正的,意味著輸入是多少,輸出也是多少,如果將這4組數(shù)據(jù)也放入譯碼編碼的過程,那將會(huì)占用不少的時(shí)間(因?yàn)橐莆粫r(shí)需要+3的情況是很少的,多數(shù)情況都是不需要修正的)。

所以,我們可以對(duì)+3模塊進(jìn)行優(yōu)化,在輸入為前4種形式時(shí),不做任何操作,直接把線接到輸出那。對(duì)于其他情況做+3處理。

如轉(zhuǎn)載涉及版權(quán)等問題,請(qǐng)作者與我司聯(lián)系,我司將在第一時(shí)間刪除或支付稿酬。