View Full Version : Help with Boolean Logic

soccerboy

05-26-2005, 12:42 PM

How can I get a BS2 to recognize negative values while using boolean logic. Here is an example:

X VAR Word

X = -2

If (X > 2) THEN DEBUG "Hello"

This code in my BS2 will still return Hello.

Thanks

Paul Baker

05-26-2005, 08:34 PM

A negative number in binary is expressed as twos compliment which is calculated by taking the NOT of the positive value then adding 1, so for -2 the inverse of 2 is $FFFD, add 1 and you get $FFFE, if you then use an unsigned operator on the two numbers youll get goofy results ($FFFE > $0002 or -2 > 2).

Jon Williams

05-26-2005, 08:42 PM

As Paul pointed out, negative numbers are stored in two's compliment form which is giving you trouble.· One way to detect a negative number is to look at bit15 of the value (it will be set when negative).· You could update your logic like this:

· IF (x.BIT15 = 0) AND (x > 2) THEN

··· DEBUG "Hello"

· ENDIF

▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔

Jon Williams

Applications Engineer, Parallax

claylj

05-26-2005, 10:21 PM

Paul and Jon are correct about the twos compliment issue and the fact that a bit set in position 15 makes the number a negative. Having said that. the simple answer is this:

X VAR Word

X = -2

IF (X < $FFFE) THEN DEBUG "Hello"

You do the twos compliment by converting the decimal number to binary then logically NOT each bit and add 1.

2 = 0000000000000010

NOT 2 = 1111111111111101

add 1 = 1111111111111110

Converting this to Hex, 1111 1111 1111 1110, you get $FFFE.

Larry

Tracy Allen

05-26-2005, 10:44 PM

If you want the IF statement to work with any twos-complement value of X from -32768 to +32767, then use an offset as follows

X = -2

Y = 2

If (X+32768 > Y+32768) THEN DEBUG "Hello"

Plug in a few numbers for X and Y to get a feel for how it works. The Stamp happily works with + numbers.

soccerboy said...

How can I get a BS2 to recognize negative values while using boolean logic. Here is an example:

X VAR Word

X = -2

If (X > 2) THEN DEBUG "Hello"

This code in my BS2 will still return Hello.

Thanks

▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔

Tracy Allen

www.emesystems.com (http://www.emesystems.com)

soccerboy

05-27-2005, 02:51 AM

Thanks all for your advice. I will try out all the suggestions and see which one is best suited for my code. I think John Williams suggestion is the best for my situation.

Ryan Clarke

05-28-2005, 01:45 AM

Won't John's take longer (the compound statement) compared to a straight comparison? (just curious)

Ryan