Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Inequality (*solved*)
#1
Am I doing something wrong here? I think the order of operations is messing up. This looks very odd. Is BAND a lower priority than = ?

Code:
dim n as uInteger
cls

for n=0 to 65530
    print at 10,10;n;"  ";n BAND 7
    print at 12,6;"n BAND 7 = 7 is ";
    IF n BAND 7 = 7 then
        print "TRUE "
    else
        print "FALSE"
    END IF
pause 0
next n


I /think/ this is doing boolean logic of

( n BAND ( 7 = 7 ) )

Or, n BAND 1

Which can't be right, surely?
Reply
#2
Could be a bug, yes. Will check it. If bAND has the same priority as AND then it will proceed as you said. bAND should behave like * operator (multiply), I Think
Reply
#3
Hi, Britlion.
In effect, the operators priority was not the standard one.
I think this one is the expected one. :?:
Code:
('left', 'OR'),
    ('left', 'AND'),
    ('left', 'XOR'),
    ('right', 'NOT'),
    ('left', 'LT', 'GT', 'EQ', 'LE', 'GE', 'NE'),
    ('left', 'BOR'),
    ('left', 'BAND', 'BXOR', 'SHR', 'SHL'),
    ('left', 'BNOT', 'PLUS', 'MINUS'),
    ('left', 'MOD'),
    ('left', 'MUL', 'DIV'),
    ('right', 'UMINUS'),
    ('right', 'POW')
Note: The "left" and "right" refers to the operator associativity. Less precedence is on top, higher precedence is on the bottom (so POW -> ^ is takes the highest precedence). Also now BOR, BAND and BXOR have higher precedence than =, <>, >=, <= etc... (relational operators, here named EQ, NE, LE, etc...)
Reply
#4
Ok. Please download version 1.2.9s882. It addressed many bugs (this being one of them).
Please, try it and tell me. :roll:
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)