1
1
Fork 0
mirror of https://github.com/QB64-Phoenix-Edition/QB64pe.git synced 2024-07-26 14:25:53 +00:00
QB64-PE/internal/help/_BYTE.txt
SMcNeill 6e01fc8dce Altered string compare routines (<,<=,>,>=) so they don't give false results with CHR$(0).
Added new _STRCMP and _STRICMP commands for quick string comparisons.
Cleaned up QB64 to finish removing the QUI (quick user insert) code and folders.
Altered UCASE and LCASE routines to be faster in some situations for us.
2014-09-22 08:19:03 -04:00

99 lines
4.6 KiB
Plaintext

A '''_BYTE''' variable can hold signed variable values from -128 to 127 (one byte or 8 [[_BIT]]s). [[_UNSIGNED|Unsigned]] from 0 to 255.
{{PageSyntax}}
:{{KW|DIM}} byte {{KW|AS}} [{{KW|_UNSIGNED}}] {{KW|_BYTE}}
{{PageDescription}}
* Signed _BYTE values can range from -128 to 127.
* [[_UNSIGNED]] _BYTEs can hold values from 0 to 255. {{KW|_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]].'''
&lt;center&gt;'''[[_BIT|BITS]]'''&lt;/center&gt;
* 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:
:* '''&quot;Big-endian&quot;''': MSB is the first bit encountered, decreasing to the LSB as the last bit by position, memory address or time.
:* '''&quot;Little-endian&quot;''': LSB is the first bit encountered, increasing to the MSB as the last bit by position, memory address or time.
{{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
{{WhiteEnd}}
::The big-endian method compares exponents of 2 &lt;sup&gt;7&lt;/sup&gt; down to 2 &lt;sup&gt;0&lt;/sup&gt; while the little-endian method does the opposite.
&lt;center&gt;'''[[_BYTE|BYTES]]'''&lt;/center&gt;
* [[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'''
'''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
{{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.
{{PageExamples}}
:How negative assignments affect the _UNSIGNED value returned by a byte(8 bits).
{{CodeStart}}
{{Cl|DIM}} unsig {{Cl|AS}} {{Cl|_UNSIGNED}} {{Cl|_BYTE}}
{{Cl|DIM}} sig {{Cl|AS}} {{Cl|_BYTE}}
{{Cl|CLS}}
unsig = 1
sig = 1
{{Cl|PRINT}} &quot;00000001 = unsigned &amp; signed are both&quot; + {{Cl|STR$}}(unsig {{Cl|AND}} sig)
unsig = 127
sig = 127
{{Cl|PRINT}} &quot;&amp;B01111111 = unsigned &amp; signed are both&quot; + {{Cl|STR$}}(unsig {{Cl|AND}} sig)
unsig = 255
sig = 255
{{Cl|PRINT}} &quot;&amp;B11111111 = unsigned is&quot; + {{Cl|STR$}}(unsig) + &quot; but signed is &quot; + {{Cl|STR$}}(sig)
unsig = 254
sig = 254
{{Cl|PRINT}} &quot;&amp;B11111110 = unsigned is&quot; + {{Cl|STR$}}(unsig) + &quot; but signed is &quot; + {{Cl|STR$}}(sig)
unsig = 253
sig = 253
{{Cl|PRINT}} &quot;&amp;B11111101 = unsigned is&quot; + {{Cl|STR$}}(unsig) + &quot; but signed is &quot; + {{Cl|STR$}}(sig)
{{Cl|PRINT}}
{{Cl|PRINT}} &quot;The signed value needs the MSB bit for the sign.&quot;
{{Cl|PRINT}} &quot;The most significant bit is furthest to the left.&quot;
{{CodeEnd}}
{{OutputStart}}
&amp;B00000001 = unsigned &amp; signed are both 1
&amp;B01111111 = unsigned &amp; signed are both 127
&amp;B11111111 = unsigned is 255 but signed is -1
&amp;B11111110 = unsigned is 254 but signed is -2
&amp;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.
{{OutputEnd}}
{{PageSeeAlso}}
* [[_BIT]], [[&amp;B]]
* [[_DEFINE]], [[DIM]]
* [[_UNSIGNED]]
* [[Mathematical Operations]]
* [[Screen Memory]]
* [[Variable Types]]
{{PageNavigation}}