哈咯各位大家好
之前突發奇想想做一個關於十進位轉化成二進位的想法,在這裡給大家講解一下。
關於數字有多進位的,十進位、二進位、三進位、八進位、十六進位....等等。對我們最熟悉的莫過於十進位和二進位了,接下來給大家講解下如何實現將十進位轉化為二進位。
【1】十進位我們最熟悉,我在這裡不多做解釋,只說十進位怎麼運算,例如302,可以看成從右往左以索引倒敘分別從0開始,進行注釋。
如圖所示1
接下來我們用十進位開始進行運算,下行索引倒敘為十進位10的指數,數字作為乘數,然後進行相加。
十進位整數轉換為二進位整數 十進位整數轉換為二進位整數採用"除2取餘,逆序排列"法。具體做法是:用2去除十進位整數,可以得到一個商和餘數;再用2去除商,又會得到一個商和餘數,如此進行,直到商為零時為止,然後把先得到的餘數作為二進位數的低位有效位,後得到的餘數作為二進位數的高位有效位,依次排列起來。
我們還是以302來進行舉例:
所以它的二進位就是100101110,將二進位轉化回來也是同樣的道理,只不過底數變成了2,我們看下:
到這裡我們基本十進位轉化為二進位的原理理解清楚了。
【2】接下來我們進入到編程:
1、產生數字:
在這裡我們可以採用按鍵選取自己指定的數字num,大飛在這裡優先建議大家採用這個方法,其次如果不想選數字,也可以隨機產生
圖片2
2、運算選取的數字num使其除2直至為0
這裡可以將除後的值再次給到num,因為除一次後num也沒作用了可以當下次的商,哈哈對num就是這麼無情。
其次就是取每次的模變量yu,運用高級運算裡面的Modulo,把yu按照索引寫入數組中,瘋狂循環除。
直到!我們的商num的值小於1位置,或者小於等於0,都可以,這是一個觸發條件。當條件觸發後我們需要再次寫入一次,相當於最後一次寫入,因為最後一次運算程序先判斷,但是我們還要餘數,所以需要再次寫入一次。
這裡我們可以用一個聲音來檢測餘數是否寫入數組成功,防止數據溢出。
3、倒敘顯示餘數
目前我們已經把十進位數字產生,並且把餘數儲存至數組裡面,接下來我們要做的就是把它顯示出來,因為二進位的顯示是以倒敘的形式顯示的,所以我們拿到新出鍋的餘數數組需要倒敘顯示。
方法有很多種:
這裡大飛是用按照索引輸出,但是顯示出來從屏幕後方,0號索引值顯示在x=150位置上,接下來1號索引顯示主機遞減,顯示在130,110,90....以此類推,以20遞減。
需要注意的是這裡顯示循環的次數是之前產生餘數循環的次數,可以在最開始的產生餘數循環內加一個變量專門計數,在我們顯示循環的循環內循環制定的次數。
總體的講解到這裡就結束,這種方法主要是使用數組陣列的方法將產生出來的數字,通過轉換成一排0101的的數字倒序寫入數組中,隨後輸出顯示出來。
有想溝通交流的可以私信評論,大飛在這裡會和大家討論研究。
喜歡的朋友可以關注一下,謝謝啦飛仔們