BYTE: Difference between revisions

From QB64 Phoenix Edition Wiki
Jump to navigation Jump to search
m (Removed protection from "BYTE")
No edit summary
Tag: Reverted
Line 28: Line 28:
  '''Little-Endian Bit On Value:'''    1    2  4  8  16  32  64  128                15
  '''Little-Endian Bit On Value:'''    1    2  4  8  16  32  64  128                15
{{WhiteEnd}}
{{WhiteEnd}}
::The big-endian method compares exponents of 2<sup>7</sup> down to 2<sup>0</sup> while the little-endian method does the opposite.  
::The big-endian method compares exponents of 2<sup>7</sup> down to 2<sup>0</sup> while the little-endian method does the opposite.




<center>'''[[_BYTE|BYTES]]'''</center>
<center>'''[[_BYTE|BYTES]]'''</center>
* [[INTEGER]] values consist of 2 bytes called the '''HI''' and '''LO''' bytes. Anytime that the number of binary digits is a multiple of 16 (2bytes, 4 bytes, etc.) and the HI byte's MSB is on(1), the value returned will be negative. Even with [[SINGLE]] or [[DOUBLE]] values!  
* [[INTEGER]] values consist of 2 bytes called the '''HI''' and '''LO''' bytes. Anytime that the number of binary digits is a multiple of 16 (2bytes, 4 bytes, etc.) and the HI byte's MSB is on(1), the value returned will be negative. Even with [[SINGLE]] or [[DOUBLE]] values!
{{WhiteStart}}                                '''16 BIT INTEGER OR REGISTER'''
{{WhiteStart}}                                '''16 BIT INTEGER OR REGISTER'''
               '''AH (High Byte Bits)                        AL (Low Byte Bits)'''
               '''AH (High Byte Bits)                        AL (Low Byte Bits)'''
Line 38: Line 38:
           ---------------------------------------|--------------------------------------
           ---------------------------------------|--------------------------------------
   HEX:  8000  4000 2000 1000  800 400  200 100 |  80  40  20  10  8    4  2    1
   HEX:  8000  4000 2000 1000  800 400  200 100 |  80  40  20  10  8    4  2    1
                                                 &verbar;
                                                 |
   DEC: -32768 16384 8192 4096 2048 1024 512 256 | 128  64  32  16  8    4  2    1
   DEC: -32768 16384 8192 4096 2048 1024 512 256 | 128  64  32  16  8    4  2    1
{{WhiteEnd}}
{{WhiteEnd}}
::The HI byte's '''MSB''' is often called the '''sign''' bit! When all 16 of the integer binary bits are on, the decimal return is -1.
::The HI byte's '''MSB''' is often called the '''sign''' bit! When all 16 of the integer binary bits are on, the decimal return is -1.





Revision as of 17:00, 22 January 2023

A _BYTE variable can hold signed variable values from -128 to 127 (one byte or 8 _BITs). Unsigned from 0 to 255.


Syntax

DIM byte AS [[[_UNSIGNED]]] _BYTE


Description

  • Signed _BYTE values can range from -128 to 127.
  • _UNSIGNED _BYTEs can hold values from 0 to 255. _UNSIGNED expands the range of positive values.
  • Can be defined in a QB64 _DEFINE statement using a starting letter range of variable names.
  • Also can be used in a subroutine parameter AS _BYTE variable definitions.
  • Define a byte using the suffix %% after the variable name: variable%% = -54
  • Define an unsigned byte by adding the suffix ~%% after the variable name: variable~%% = 54
  • When a variable has not been assigned or has no type suffix, the value defaults to SINGLE.


BITS
  • The MSB is the most significant(largest) bit value and LSB is the least significant bit of a binary or register memory address value. The order in which the bits are read determines the binary or decimal byte value. There are two common ways to read a byte:
  • "Big-endian": MSB is the first bit encountered, decreasing to the LSB as the last bit by position, memory address or time.
  • "Little-endian": LSB is the first bit encountered, increasing to the MSB as the last bit by position, memory address or time.

Template:WhiteStart

        Offset or Position:    0    1   2   3   4   5   6   7      Example: 11110000
                             ----------------------------------             --------
   Big-Endian Bit On Value:   128  64  32  16   8   4   2   1                 240
Little-Endian Bit On Value:    1    2   4   8  16  32  64  128                 15

Template:WhiteEnd

The big-endian method compares exponents of 27 down to 20 while the little-endian method does the opposite.


BYTES
  • INTEGER values consist of 2 bytes called the HI and LO bytes. Anytime that the number of binary digits is a multiple of 16 (2bytes, 4 bytes, etc.) and the HI byte's MSB is on(1), the value returned will be negative. Even with SINGLE or DOUBLE values!

Template:WhiteStart 16 BIT INTEGER OR REGISTER

             AH (High Byte Bits)                         AL (Low Byte Bits)
  BIT:    15    14   13   12   11   10   9   8  |   7   6    5   4    3    2   1    0
         ---------------------------------------|--------------------------------------
  HEX:   8000  4000 2000 1000  800 400  200 100 |  80   40  20   10   8    4   2    1
                                                |
  DEC: -32768 16384 8192 4096 2048 1024 512 256 | 128   64  32   16   8    4   2    1

Template:WhiteEnd

The HI byte's MSB is often called the sign bit! When all 16 of the integer binary bits are on, the decimal return is -1.


Examples

How negative assignments affect the _UNSIGNED value returned by a byte (8 bits).
DIM unsig AS _UNSIGNED _BYTE
DIM sig AS _BYTE

CLS
unsig = 1
sig = 1
PRINT "00000001 = unsigned & signed are both" + STR$(unsig AND sig)

unsig = 127
sig = 127
PRINT "&B01111111 = unsigned & signed are both" + STR$(unsig AND sig)

unsig = 255
sig = 255
PRINT "&B11111111 = unsigned is" + STR$(unsig) + " but signed is " + STR$(sig)

unsig = 254
sig = 254
PRINT "&B11111110 = unsigned is" + STR$(unsig) + " but signed is " + STR$(sig)

unsig = 253
sig = 253
PRINT "&B11111101 = unsigned is" + STR$(unsig) + " but signed is " + STR$(sig)

PRINT
PRINT "The signed value needs the MSB bit for the sign."
PRINT "The most significant bit is furthest to the left."
&B00000001 = unsigned & signed are both 1
&B01111111 = unsigned & signed are both 127
&B11111111 = unsigned is 255 but signed is -1
&B11111110 = unsigned is 254 but signed is -2
&B11111101 = unsigned is 253 but signed is -3

The signed value needs the MSB bit for the sign.
The most significant bit is furthest to the left.


See also



Navigation:
Main Page with Articles and Tutorials
Keyword Reference - Alphabetical
Keyword Reference - By usage
Report a broken link