| QBASIC - Rutiner - Binære - Binær konvertering |
Qbasic kan håndtere hexadecimale tal med VAL() og HEX$() - på denne måde:
| h$ = "9D" PRINT h$; " = "; VAL("&H" + h$) h% = 157 PRINT h%; " = "; HEX$(h%) |
9D = 157 157 = 9D |
- men der er ingen tilsvarende understøttelse af binære tal.
Funktionen bins(b$)konverterer fra binært tal (angivet som en tekst-streng) til decimalværdi - fx:
| b$ = "10011101" PRINT b$; " = "; bins(b$) |
10011101 = 157 |
Funktionen bin$(b%)konverterer fra decimalværdi til binært tal (angivet som en tekst-streng) - fx:
| b% = 157 PRINT b%; " = "; bin$(b%) |
157 = 10011101 |
Konverteringen udføres her på to måder: i Qbasic og i Assembler (ca 10 gange hurtigere)
| DECLARE FUNCTION bin$ (b%) DECLARE FUNCTION bins% (b$) |
|
| b$ = "10011101" PRINT b$; " = "; bins(b$) |
10011101 = 157 |
| b% = 157 PRINT b%; " = "; bin$(b%) |
157 = 10011101 |
FUNCTION bins% (b$)
n& = 0: p& = 1
FOR b% = LEN(b$) TO 1 STEP -1
IF MID$(b$, b%, 1) = "1" THEN
n& = n& + p&
END IF
p& = p& + p&
NEXT
bins% = CVI(MKL$(n&))
END FUNCTION
|
FUNCTION bin$ (W%)
b$ = " "
n& = &HFFFF& AND b%
FOR i% = 16 TO 1 STEP -1
IF n& AND 1 THEN
MID$(b$, i%) = "1"
ELSE
MID$(b$, i%) = "0"
END IF
n& = n& \ 2
IF n& = 0 THEN EXIT FOR
NEXT
bin2$ = LTRIM$(b$)
END FUNCTION
|
Binær konvertering - Qbasic + Assembler
| Basic-koden |
DECLARE SUB Init () DECLARE FUNCTION bin$ (b%) DECLARE FUNCTION bins% (b$) |
|
| DIM SHARED sbin AS STRING * 60 DIM SHARED sbins AS STRING * 60 |
Globale strings dimensioneres med plads til maskinkoden. bin-koden fylder 49 bytes bins-koden fylder 53 bytes |
| Init | Maskinkoden indlæses |
| b$ = "10011101" PRINT b$; " = "; bins(b$) |
10011101 = 157 |
| b% = 157 PRINT b%; " = "; bin$(b%) |
157 = 10011101 |
SUB Init |
|
BLOAD "bin.bin", VARPTR(sbin)) BLOAD "bins.bin", VARPTR(sbins)) END SUB |
>MASM: bin.asm og bins.asm |
FUNCTION bin$ (b%) b$ = SPACE$(16) CALL ABSOLUTE(b%, b$, VARPTR(sbin) bin$ = LTRIM$(b$) END FUNCTION |
b% : den numeriske værdi (fx 157). b$ : til den returnerede binære tekst ("10011101"). |
FUNCTION bins% (b$) CALL ABSOLUTE(b$, b%, VARPTR(sbins) bins% = b% END FUNCTION |
b$ : den binære tekst (fx "10011101"). b% : den returnerede numeriske værdi (157). |