This document intends to shed some light on the way binary variables are handled in the 6K programming language. Binary variables follow three basic rules:
Math operations (i.e. + , - , * , / , = , etc.) treat binary variables as 32 bit numbers. This means that all 32 bits are affected by any math operation done to a binary variable. See the truth table below for examples.
NOTE: This means that bits previously set as a "don't care" ('X') will get set to a 1 or a 0 as appropriate to the math operation result.
Logical operations (i.e. & , | , <> , etc.) treat binary variables as 32 bits. This means that the operation is done bit-wise (bit by bit and only on the bits specified by the operation). See the truth table below for examples.
NOTE: The 6K language will not make assumptions about any "don't care" ('X') bits contained within the binary variable. If the operation's result cannot be determined because of a "don't care" bit, the result will be a "don't care".
Two examples are:
VARB1=B1
VARB2=BX
VARB3=VARB1|VARB2
VARB3 ends up with a 1 as the first bit.
In the first example, the 6K knows that since VARB1=B1 the OR operation will be TRUE = 1.VARB1=B1
VARB2=BX
VARB3=VARB1&VARB2
VARB3 ends up with an X as the first bit.
In the second example, the 6K does not have enough information to evaluate it so the result is an X.
Conditionals will always evaluate a "don't care" bit ('X') as true. Three examples are:
VARB1=B1
IF(VARB1=BX) will always evaluate as TRUE.VARB1=BX
IF(VARB1=B1) will also always evaluate as TRUE since you are comparing a 1 against a don't care.VARB1=B11
IF(VARB1=BX0) will evaluate as FALSE. The first bit evaluated as TRUE but the comparison of the second bit evaluated as FALSE. Multiple bit comparisons are ANDed.
VARB1 | VARB2 | Operation | Result |
---|---|---|---|
0 | 0 | + (add) | 0000_0000_0000_0000_0000_0000_0000_0000 |
0 | 0 |
| 0000_0000_0000_0000_0000_0000_0000_0000 |
0 | 0 | | (OR) | 0XXX_XXXX_XXXX_XXXX_ XXXX_XXXX_XXXX_XXXX |
0 | 0 | & (AND) | 0XXX_XXXX_XXXX_XXXX_ XXXX_XXXX_XXXX_XXXX |
0 | 1 | + (add) | 1000_0000_0000_0000_0000_0000_0000_0000 |
0 | 1 |
| 1111_1111_1111_1111_1111_1111_1111_1111 |
0 | 1 | | (OR) | 1XXX_XXXX_XXXX_XXXX_ XXXX_XXXX_XXXX_XXXX |
0 | 1 | & (AND) | 0XXX_XXXX_XXXX_XXXX_ XXXX_XXXX_XXXX_XXXX |
1 | 0 | + (add) | 1000_0000_0000_0000_0000_0000_0000_0000 |
1 | 0 |
| 1000_0000_0000_0000_0000_0000_0000_0000 |
1 | 0 | | (OR) | 1XXX_XXXX_XXXX_XXXX_ XXXX_XXXX_XXXX_XXXX |
1 | 0 | & (AND) | 0XXX_XXXX_XXXX_XXXX_ XXXX_XXXX_XXXX_XXXX |
1 | 1 | + (add) | 0100_0000_0000_0000_0000_0000_0000_0000 |
1 | 1 |
| 0000_0000_0000_0000_0000_0000_0000_0000 |
1 | 1 | | (OR) | 1XXX_XXXX_XXXX_XXXX_ XXXX_XXXX_XXXX_XXXX |
1 | 1 | & (AND) | 1XXX_XXXX_XXXX_XXXX_ XXXX_XXXX_XXXX_XXXX |
0 | X | + (add) | 0000_0000_0000_0000_0000_0000_0000_0000 |
0 | X |
| 0000_0000_0000_0000_0000_0000_0000_0000 |
0 | X | | (OR) | XXXX_XXXX_XXXX_XXXX_ XXXX_XXXX_XXXX_XXXX |
0 | X | & (AND) | 0XXX_XXXX_XXXX_XXXX_ XXXX_XXXX_XXXX_XXXX |
X | 0 | + (add) | 0000_0000_0000_0000_0000_0000_0000_0000 |
X | 0 |
| 0000_0000_0000_0000_0000_0000_0000_0000 |
X | 0 | | (OR) | XXXX_XXXX_XXXX_XXXX_ XXXX_XXXX_XXXX_XXXX |
X | 0 | & (AND) | 0XXX_XXXX_XXXX_XXXX_ XXXX_XXXX_XXXX_XXXX |
1 | X | + (add) | 1000_0000_0000_0000_0000_0000_0000_0000 |
1 | X |
| 1000_0000_0000_0000_0000_0000_0000_0000 |
1 | X | | (OR) | 1XXX_XXXX_XXXX_XXXX_ XXXX_XXXX_XXXX_XXXX |
1 | X | & (AND) | XXXX_XXXX_XXXX_XXXX_ XXXX_XXXX_XXXX_XXXX |
X | 1 | + (add) | 1000_0000_0000_0000_0000_0000_0000_0000 |
X | 1 |
| 1111_1111_1111_1111_1111_1111_1111_1111 |
X | 1 | | (OR) | 1XXX_XXXX_XXXX_XXXX_ XXXX_XXXX_XXXX_XXXX |
X | 1 | & (AND) | XXXX_XXXX_XXXX_XXXX_ XXXX_XXXX_XXXX_XXXX |
X | X | + (add) | 0000_0000_0000_0000_0000_0000_0000_0000 |
X | X |
| 0000_0000_0000_0000_0000_0000_0000_0000 |
X | X | | (OR) | XXXX_XXXX_XXXX_XXXX_ XXXX_XXXX_XXXX_XXXX |
X | X | & (AND) | XXXX_XXXX_XXXX_XXXX_ XXXX_XXXX_XXXX_XXXX |
Add Comment