# Difference between revisions of "UNSIGNED"

Jump to navigation
Jump to search

imported>Clippy m |
imported>Clippy m |
||

Line 27: | Line 27: | ||

:LOCATE 3, 6: PRINT "Press Esc to exit loop" | :LOCATE 3, 6: PRINT "Press Esc to exit loop" | ||

:FOR n = 1 TO 80000 | :FOR n = 1 TO 80000 | ||

::_LIMIT 10000 ' 6.5 second | ::_LIMIT 10000 ' 6.5 second loop | ||

::LOCATE 12, 37: PRINT n ' display current value | ::LOCATE 12, 37: PRINT n ' display current value | ||

::IF n > 0 THEN pn = n 'find highest value | ::IF n > 0 THEN pn = n ' find highest value | ||

::IF n = 0 THEN Count = Count + 1: LOCATE 14, 37: PRINT "Count:"; Count; "Max:"; pn | ::IF n = 0 THEN Count = Count + 1: LOCATE 14, 37: PRINT "Count:"; Count; "Max:"; pn | ||

::IF INP(&H60) = 1 THEN EXIT FOR ' escape key exit | ::IF INP(&H60) = 1 THEN EXIT FOR ' escape key exit |

## Revision as of 02:01, 17 February 2010

**_UNSIGNED** defines a numerical value as being positive using **QB64** only.

*Syntax:*_DEFINE LetterRange AS [_UNSIGNED] datatype

- Although _UNSIGNED values can use negative values the result subtracts from the highest value of the number's type keeping it positive.
- Datatype can be any of the following: INTEGER, SINGLE, DOUBLE, LONG, STRING, _BIT, _BYTE, _INTEGER64, _FLOAT
- _UNSIGNED can be used in a _DEFINE statement to set undefined variable name first letters as all positive only values.
- Can also be used in DIM statements or Subprocedure parameter definitions following AS.
- _UNSIGNED allows larger positive numerical variable value limits than signed ones.
- The Unsigned variable type suffix used is the
**tilde ~**before the number's own type suffix: variablename~&

*Example 1:* How negative values affect the _UNSIGNED value returned by a _BYTE(8 bits).

- 00000001 - unsigned & signed are both 1
- 01111111 - unsigned & signed are both 127
- 11111111 - unsigned is 255 but signed is -1
- 11111110 - unsigned is 254 but signed is -2
- 11111101 - unsigned is 253 but signed is -3

*Example 2:* Demonstrating how _UNSIGNED variables expand the Integer range.

- DIM n AS _UNSIGNED INTEGER
- DIM pn AS _UNSIGNED INTEGER
- LOCATE 3, 6: PRINT "Press Esc to exit loop"
- FOR n = 1 TO 80000
- _LIMIT 10000 ' 6.5 second loop
- LOCATE 12, 37: PRINT n ' display current value
- IF n > 0 THEN pn = n ' find highest value
- IF n = 0 THEN Count = Count + 1: LOCATE 14, 37: PRINT "Count:"; Count; "Max:"; pn
- IF INP(&H60) = 1 THEN EXIT FOR ' escape key exit

- NEXT n
- END

*Explanation:* The maximum value can only be 65535(32767 + 32768) so the FOR loop repeats itself. Remove the _UNSIGNED parts and run it again.

*See also:* DECLARE, SUB, FUNCTION, DIM, _DEFINE, DEFSTR, DEFLNG, DEFINT, DEFSNG, DEFDBL, ABS, SGN