RosettaCodeData/Task/Bitwise-operations/XBasic/bitwise-operations.basic

42 lines
1.4 KiB
Plaintext

PROGRAM "bitwise"
DECLARE FUNCTION Entry()
INTERNAL FUNCTION ULONG Rotr(ULONG x, ULONG s)
FUNCTION Entry()
SLONG a, b
ULONG ua, ub
a = 21
b = 3
ua = a
ub = b
PRINT
PRINT "= Decimal ="
PRINT LTRIM$(STR$(a)); " AND"; b; ":"; a & b ' also: a AND b
PRINT LTRIM$(STR$(a)); " OR"; b; ":"; a | b ' also: a OR b
PRINT LTRIM$(STR$(a)); " XOR"; b; ":"; a ^ b' also: a XOR b
PRINT "NOT"; a; ":"; ~a ' also: NOT a
PRINT LTRIM$(STR$(a)); " <<<"; b; ":"; a <<< b ' arithmetic left shift
PRINT LTRIM$(STR$(a)); " >>>"; b; ":"; a >>> b ' arithmetic right shift
PRINT LTRIM$(STR$(ua)); " <<"; b; ":"; ua << b ' bitwise left shift
PRINT LTRIM$(STR$(ua)); " >>"; b; ":"; ua >> b ' bitwise right shift
PRINT LTRIM$(STR$(ua)); " rotr"; ub; ":"; Rotr(ua, ub)
PRINT
PRINT "= Binary ="
PRINT BIN$(a); " AND "; BIN$(b); ": "; BIN$(a & b)
PRINT BIN$(a); " OR "; BIN$(b); ": "; BIN$(a | b)
PRINT BIN$(a); " XOR "; BIN$(b); ": "; BIN$(a ^ b)
PRINT "NOT "; BIN$(a); ": "; BIN$(~a)
PRINT BIN$(a); " <<< "; BIN$(b); ": "; BIN$(a <<< b)
PRINT BIN$(a); " >>> "; BIN$(b); ": "; BIN$(a >>> b)
PRINT BIN$(ua); " << "; BIN$(b); ": "; BIN$(ua << b)
PRINT BIN$(ua); " >> "; BIN$(b); ": "; BIN$(ua >> b)
PRINT BIN$(ua); " Rotr "; BIN$(ub); ": "; BIN$(Rotr(ua, ub))
END FUNCTION
' Rotate x to the right by s bits
FUNCTION ULONG Rotr(ULONG x, ULONG s)
RETURN (x >> s) | (x << (SIZE(ULONG) * 8 - s))
END FUNCTION
END PROGRAM