﻿﻿ _UNSIGNED - QB64 Wiki

# _UNSIGNED

Jump to: navigation, search

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

TYPE Syntax:

DIM variable AS [UNSIGNED] datatype
variable AS [_UNSIGNED] datatype

_DEFINE Syntax:

_DEFINE LetterRange AS [_UNSIGNED] datatype

Description:

• When _UNSIGNED values 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, LONG, _BIT, _BYTE, _INTEGER64, _OFFSET
• SINGLE, DOUBLE and _FLOAT variable types cannot be _UNSIGNED!
• _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~&

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 1: When a signed QB64 INTEGER value exceeds 32767, the value may become a negative value:

i% = 38000 PRINT i%

-27536

Explanation: Use an _UNSIGNED INTEGER or a ~% variable type suffix for only positive integer values up to 65535.

Example 2: In QB64 _UNSIGNED INTEGER values greater than 65535 cycle over again from zero:

i~% = 70000 PRINT i~%

4464

Explanation: In QB64 an unsigned integer value of 65536 would be 0 with values increasing by the value minus 65536.

Example 3: 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

Press Esc to exit loop 65462 Count: 13 Max: 65535

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:

Navigation:
Go to Keyword Reference - Alphabetical
Go to Keyword Reference - By usage
Go to Main WIKI Page