Hallo,
um bestimmte Algorithmen auch in BASIC zu implementieren, benötigt man oft bitweise "shift" (bits "schieben" um 1 oder mehrere Stellen links oder rechts im Binärsystem) .
Bytes (0-255) so zu bearbeiten ist noch relativ trivial und effizient zu implementieren:
10 PRINT "BITWISE SHIFT IN BASICA"
20 INPUT "BYTE VALUE (0-255) ";A%
30 PRINT "VALUE IN HEX=";HEX$(A%)
40 B%=255 AND (A%+A%)
50 PRINT "LEFT SHIFT=";HEX$(B%)
60 REM BASICA ALWAYS TAKE NUMBERS AS A FLOAT !
70 REM SO YOU MUST USE INT() FUNCTION TO GET AN INTEGER RESULT
80 B%=INT(A%/2)
90 PRINT "RIGHT SHIFT (HEX)=";HEX$(B%)
Das was schon weniger effizient ist, die Division durch 2, ist schon häßlich, aber die Kröte schluckt man noch.
Wenn man aber 16-Bit Integer bitweise "schieben" will, wird es richtig ineffizient, weil man scheinbar das nur noch mit FLOAT Rechenoperationen hinbekommt.
10 PRINT "16-BIT INTEGER SHIFT IN BASICA"
20 INPUT "INTEGER VALUE (0-65535) ";A
30 IF A<>INT(A) THEN PRINT"FLOAT IS NOT THE SAME AS INTEGER.":GOTO 20
40 IF A>65535! OR A<0! THEN PRINT"NOT IN INTEGER VALUE RANGE.":GOTO 20
50 PRINT "VALUE IN HEX=";HEX$(A)
60 B=A+A:IF B>65535! THEN B=B-65536!
70 PRINT "LEFT SHIFT=";HEX$(B)
80 REM BASICA ALWAYS TAKE NUMBERS AS A FLOAT !
90 REM SO YOU MUST USE INT() FUNCTION TO GET AN INTEGER RESULT
100 B=INT(A/2)
110 PRINT "RIGHT SHIFT (HEX)=";HEX$(B)
Hat jemand eine elegantere Idee zum Bearbeiten von 16-Bit Werten in BASIC ?