簡體   English   中英

將 n 位二進制轉換為以 10 為底的數字

[英]Convert n-bit binary to base 10 number

我在看這個小人電腦問題:

  • 第一個輸入確定 n 的值,假設該值等於 4 或更大
  • 示例:如果第一個輸入是八 (8),則請求八個后續輸入。 如果后續輸入編號為 1、0、0、1、0、0、0、0,則 output 將為 9。
  • n 個輸入值由用戶提供,每個位一個:第一個是最低有效位。 第 n 個輸入是最高有效位。

我的嘗試:

IN
STO NUMBER
IN
STO A
IN
STO B
IN
STO C
IN
STO D


LOOPB: LDA FOUR
BRZ ENDB
SUB ONE
STO FOUR
LDA RESB
ADD B
STO RESB
BRP LOOP
ENDB:LDA RESB
OUT
HLT

ONE: DAT 1
EIGHT: DAT 8
FOUR: DAT 4
TWO: DAT 2
POWERONE: DAT 1

RESA: DAT 000
RESB: DAT 000

RESULT: DAT 000

NUMBER: DAT 0
A: DAT 0
B: DAT 0
C: DAT 0
D: DAT 0

我不知道如何解決這個問題,如何使 00001001 在 LMC 上轉換為 9? 我不確定如何在 LMC 上進行乘法運算。

您擁有的代碼不使用第一個輸入。 相反,它使用FOUR 這是要改變的第一件事,因為您不想循環精確四次,而是與您的第一個輸入一樣多。

其次,您不需要將每個下一個輸入存儲在單獨的郵箱中。 相反,您可以立即處理 0/1 輸入,因為它決定是否要向結果中添加某些內容。 因此,您只需要根據輸入的 0/1 值更新結果。 你不需要自己存儲那個 0/1 值——所以不需要ABC ...等。 而是將IN指令放在循環中。

然后仍然當輸入結果為 1 時您應該添加到結果中的確切內容。由於輸入順序相反(最低有效位在前),您應該跟蹤 2 的冪,在每個冪中加倍循環的迭代。 每當您遇到輸入 1 時,這將是添加到結果中的數字。因為這就是二進制系統的工作方式。 例如,如果輸入的數字是 1 1 0 1,那么計算是:

輸入數字 2的冪 待添加 運行總和
1 1 是的 1
1 2 是的 3
0 4 3
1 8 是的 11

所以這里是腳本。 您可以在此處運行它:首先運行代碼片段(啟動 LMC 模擬器),然后使用右側面板中的控件:

 #input:8 1 0 1 1 0 0 0 0 LDA ZERO # Initialise, so program still runs STO RESULT # correctly when it is reset. LDA ONE STO POWER IN # Get number of binary digits LOOP BRZ OUTPUT # All digits have been read STO COUNT IN # Get a binary digit BRZ NEXT # Nothing to add when it's zero LDA RESULT # Add a power of 2 to the result ADD POWER STO RESULT NEXT LDA POWER # Next power of 2 ADD POWER STO POWER LDA COUNT # Prepare for next iteration SUB ONE BR LOOP OUTPUT LDA RESULT OUT ZERO HLT ONE DAT 1 POWER DAT 1 COUNT DAT RESULT DAT <script src="https://cdn.jsdelivr.net/gh/trincot/lmc@v0.816/lmc.js"></script>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM