Untitled

 avatar
unknown
plain_text
2 months ago
1.1 kB
8
No Index
' ./zxbasic/zxbc manipulacao_bits.bas --tzx --BASIC --autorun

' print um byte em formato binário
SUB print_bin(v AS uBYTE)
    PRINT v >> 7 bAND 1b; v >> 6 bAND 1b; v >> 5 bAND 1b; v >> 4 bAND 1b; v >> 3 bAND 1b; v >> 2 bAND 1b; v >> 1 bAND 1b; v >> 0 bAND 1b
END SUB

' obtém 2 bits da posição (shift) desejada
FUNCTION get_2bit(v AS uBYTE, shift AS uBYTE) AS uBYTE
    RETURN (v >> shift) bAND 11b
END FUNCTION

' faz uma adição/subtração em 2 bits na posição desejada
FUNCTION inc_2bit(v AS uBYTE, shift AS uBYTE, ii AS BYTE) AS uBYTE
    ' DIM a AS uBYTE = v >> shift bAND 11b
    DIM a AS uBYTE = get_2bit(v, shift)
    IF (a = 3 AND ii > 0) or (a = 0 AND ii < 0) THEN
        RETURN v
    END IF
    LET a = a+ii
    DIM mask AS uBYTE = 11b << shift
    LET mask = bNOT mask
    ' print_bin(mask)
    DIM res AS uBYTE = (v bAND mask) bOR (a << shift)
    RETURN res
END FUNCTION


CLS

DIM a AS uBYTE = 11011010b
DIM b AS uBYTE = (a >> 6) bAND 11b
DIM c AS uBYTE = a >> 5 bAND 1b

print_bin(a)
PRINT b
PRINT c

print_bin(inc_2bit(a, 2, -1))
Editor is loading...