This example attempts to show the behavior of the system when dealing with conversion between types, signed or unsigned. The rule that ugBASIC uses is the minimum error rule: in general, if the destination type has a sufficient number of bits, it is possible to represent the information without losses. If the destination type has fewer bits, the number is guaranteed to be represented correctly if the number of destination bits are sufficient. In case of signed types, if the source number is negative but the destination type is unsigned, the value will be set to the absolute value without sign.
source
compile
sandbox
issues?
back to examples
PROCEDURE example ON ALL BUT VIC20, PLUS4, C16
CLS
' ******************************************************************
' ******** destination: signed byte ********************************
' ******************************************************************
DIM sb AS SIGNED BYTE
' source underflow -> destination underflow
'
' -42 = 11010110 -> 11010110 -> -42
sb = -42
PRINT "signed byte(-42) = "; sb; " (exp ";"-42";" )"
' source overflow [with unsigned byte] -> destination approximation
'
' 200 = 11001000 -> 01001000 -> +72
sb = 200
PRINT "signed byte(200) = "; sb; " (exp ";"72";" )"
' source overflow [with signed word] -> destination approximation
'
' -500 = 1111111000001100 -> 000111110100 -> 11110100 -> -116
sb = -500
PRINT "signed byte(-500) = "; sb; " (exp ";"-116";" )"
' source overflow [with unsigned word] -> destination approximation
'
' 20000 = 0100111000100000 -> 00100000 -> +32
sb = 20000
PRINT "signed byte(20000) = "; sb; " (exp ";"32";" )"
' source overflow [with signed dword] -> destination approximation
'
' -100500 = 11111111111111100111011101101100 -> 00011000100010010100 -> 10010100
sb = -100500
PRINT "signed byte(-100500) = "; sb; " (exp ";"-20";" )"
' source overflow [with unsigned dword] -> destination approximation
sb = 10020000
PRINT "signed byte(10020000) = "; sb; " (exp ";"32";" )"
' ******************************************************************
' ******************************************************************
' ******************************************************************
WAIT KEY RELEASE : PRINT
' ******************************************************************
' ******** destination: unsigned byte ******************************
' ******************************************************************
DIM b AS BYTE
' source underflow -> destination underflow
'
' 42 = 11010110 -> 11010110 -> 42
b = 42
PRINT "byte(42) = "; b; " (exp ";"42";" )"
' source overflow [with unsigned byte] -> destination unsigned
'
' -42 = 11010110 -> 01001000 -> +42
b = -42
PRINT "byte(-42) = "; b; " (exp ";"42";" )"
' source overflow [with signed word] -> destination approximation
'
' -500 = 1111111000001100 -> 000111110100 -> 11110100 -> -116
b = -500
PRINT "byte(-500) = "; b; " (exp ";"12";" )"
' source overflow [with unsigned word] -> destination approximation
'
' 20000 = 0100111000100000 -> 00100000 -> +32
b = 20000
PRINT "byte(20000) = "; b; " (exp ";"32";" )"
' source overflow [with signed dword] -> destination approximation
'
' -100500 = 11111111111111100111011101101100 -> 00011000100010010100 -> 10010100
b = -100500
PRINT "byte(-100500) = "; b; " (exp ";"148";" )"
' source overflow [with unsigned dword] -> destination approximation
b = 10020000
PRINT "byte(10020000) = "; b; " (exp ";"160";" )"
' ******************************************************************
' ******************************************************************
' ******************************************************************
WAIT KEY RELEASE : PRINT
' ****************************************************************
' ******** destination: signed word ******************************
' ****************************************************************
DIM sw AS SIGNED WORD
' source underflow -> destination underflow
'
' 42 = 11010110 -> 11010110 -> 42
sw = 42
PRINT "signed word(42) = "; sw; " (exp ";"42";" )"
' source underflow [with unsigned byte] -> destination underflow
'
' -42 = 11010110 -> -42
sw = -42
PRINT "signed word(-42) = "; sw; " (exp ";"-42";" )"
' source underfow [with signed word] -> destination underflow
'
' -500 = 1111111000001100 -> -500
sw = -500
PRINT "signed word(-500) = "; sw; " (exp ";"-500";" )"
' source overflow [with unsigned word] -> destination approximation
'
' 40000 = 0100111000100000 -> 00100000 -> 7232
sw = 40000
PRINT "signed word(40000) = "; sw; " (exp ";"7232";" )"
' source overflow [with signed dword] -> destination approximation
'
' -100500 = 11111111111111100111011101101100 -> 00011000100010010100 -> 10010100
sw = -100500
PRINT "signed word(-100500) = "; sw; " (exp ";"-2196";" )"
' source overflow [with unsigned dword] -> destination approximation
sw = 10020000
PRINT "signed word(10020000) = "; sw; " (exp ";"25760";" )"
' ******************************************************************
' ******************************************************************
' ******************************************************************
WAIT KEY RELEASE : PRINT
' ******************************************************************
' ******** destination: unsigned word ******************************
' ******************************************************************
DIM w AS WORD
' source underflow -> destination underflow
'
' 42 = 11010110 -> 11010110 -> 42
w = 42
PRINT "word(42) = "; w; " (exp ";"42";" )"
' source underflow [with unsigned byte] -> destination underflow
'
' -42 = 11010110 -> -42
w = -42
PRINT "word(-42) = "; w; " (exp ";"42";" )"
' source underfow [with signed word] -> destination underflow
'
' -500 = 1111111000001100 -> -500
w = -500
PRINT "word(-500) = "; w; " (exp ";"500";" )"
' source overflow [with unsigned word] -> destination underflow
'
' 40000 = 0100111000100000 -> 00100000 -> 7232
w = 40000
PRINT "word(40000) = "; w; " (exp ";"40000";" )"
' source overflow [with signed dword] -> destination approximation
'
' -100500 = 11111111111111100111011101101100 -> 00011000100010010100 -> 10010100
w = -100500
PRINT "word(-100500) = "; w; " (exp ";"30752";" )"
' source overflow [with unsigned dword] -> destination approximation
w = 10020000
PRINT "word(10020000) = "; w; " (exp ";"58528";" )"
' ******************************************************************
' ******************************************************************
' ******************************************************************
WAIT KEY RELEASE : PRINT
' *****************************************************************
' ******** destination: signed dword ******************************
' *****************************************************************
DIM dw AS SIGNED DWORD
' source underflow -> destination underflow
'
' 42 = 11010110 -> 11010110 -> 42
dw = 42
PRINT "signed dword(42) = "; dw; " (exp ";"42";" )"
' source underflow [with unsigned byte] -> destination underflow
'
' -42 = 11010110 -> -42
dw = -42
PRINT "signed dword(-42) = "; dw; " (exp ";"-42";" )"
' source underfow [with signed word] -> destination underflow
'
' -500 = 1111111000001100 -> -500
dw = -500
PRINT "signed dword(-500) = "; dw; " (exp ";"-500";" )"
' source underflow [with unsigned word] -> destination underflow
'
' 40000 = 0100111000100000 -> 00100000 -> 7232
dw = 40000
PRINT "signed dword(40000) = "; dw; " (exp ";"40000";" )"
' source underflow [with signed dword] -> destination underflow
'
' -100500 = 11111111111111100111011101101100 -> 00011000100010010100 -> 10010100
dw = -100500
PRINT "signed dword(-100500) = "; dw; " (exp ";"-100500";" )"
' source underflow [with unsigned dword] -> destination approximation
dw = 10020000
PRINT "signed dword(10020000) = "; sw; " (exp ";"25760";" )"
' ******************************************************************
' ******************************************************************
' ******************************************************************
WAIT KEY RELEASE : PRINT
' ******************************************************************
' ******** destination: unsigned word ******************************
' ******************************************************************
DIM udw AS DWORD
' source underflow -> destination underflow
'
' 42 = 11010110 -> 11010110 -> 42
udw = 42
PRINT "unsigned dword(42) = "; udw; " (exp ";"42";" )"
' source underflow [with unsigned byte] -> destination underflow
'
' -42 = 11010110 -> -42
udw = -42
PRINT "unsigned dword(-42) = "; udw; " (exp ";"42";" )"
' source underfow [with signed word] -> destination underflow
'
' -500 = 1111111000001100 -> -500
udw = -500
PRINT "unsigned dword(-500) = "; udw; " (exp ";"500";" )"
' source underflow [with unsigned word] -> destination underflow
'
' 40000 = 0100111000100000 -> 00100000 -> 7232
udw = 40000
PRINT "unsigned dword(40000) = "; udw; " (exp ";"40000";" )"
' source underflow [with signed dword] -> destination underflow
'
' -100500 = 11111111111111100111011101101100 -> 00011000100010010100 -> 10010100
udw = -100500
PRINT "unsigned dword(-100500) = "; udw; " (exp ";"-100500";" )"
' source underflow [with unsigned dword] -> destination underflow
udw = 10020000
PRINT "unsigned dword(10020000) = "; udw; " (exp ";"10020000";" )"
END PROCEDURE
example[] ON ALL BUT VIC20, PLUS4, C16
The instructions here refer to compiling the example from the command line. For Microsoft Windows
users we suggest using UGBASIC-IDE, which allows
you to download and compile each single example with just one click.
Are instructions for your specific home computer / console missing? First of all, check if your computer
is supported by clicking here. If so, since ugBASIC is a language which does not provide abstractions, it is possible
that this example will not work on your target. If you think this is an issue, please click here.
In order to compile the example, type this command on the command line:
Linux
ugbc.cpc -O dsk -o maths_relative_03.dsk maths_relative_03.bas
Windows
ugbc.cpc.exe -O dsk -o maths_relative_03.dsk maths_relative_03.bas
For Microsoft Windows users we suggest using UGBASIC-IDE, which allows
you to download and compile this example with just one click.
In order to compile the example, type this command on the command line:
Linux
ugbc.atarixl -O xex -o maths_relative_03.xex maths_relative_03.bas
Windows
ugbc.atarixl.exe -O xex -o maths_relative_03.xex maths_relative_03.bas
For Microsoft Windows users we suggest using UGBASIC-IDE, which allows
you to download and compile this example with just one click.
In order to compile the example, type this command on the command line:
Linux
ugbc.atari -O xex -o maths_relative_03.xex maths_relative_03.bas
Windows
ugbc.atari.exe -O xex -o maths_relative_03.xex maths_relative_03.bas
For Microsoft Windows users we suggest using UGBASIC-IDE, which allows
you to download and compile this example with just one click.
In order to compile the example, type this command on the command line:
Linux
ugbc.coco -O bin -o maths_relative_03.bin maths_relative_03.bas
Windows
ugbc.coco.exe -O bin -o maths_relative_03.bin maths_relative_03.bas
For Microsoft Windows users we suggest using UGBASIC-IDE, which allows
you to download and compile this example with just one click.
In order to compile the example, type this command on the command line:
Linux
ugbc.coco3 -O bin -o maths_relative_03.bin maths_relative_03.bas
Windows
ugbc.coco3.exe -O bin -o maths_relative_03.bin maths_relative_03.bas
For Microsoft Windows users we suggest using UGBASIC-IDE, which allows
you to download and compile this example with just one click.
In order to compile the example, type this command on the command line:
Linux
ugbc.coleco -O rom -o maths_relative_03.rom maths_relative_03.bas
Windows
ugbc.coleco.exe -O rom -o maths_relative_03.rom maths_relative_03.bas
For Microsoft Windows users we suggest using UGBASIC-IDE, which allows
you to download and compile this example with just one click.
In order to compile the example, type this command on the command line:
Linux
ugbc.c128 -O prg -o maths_relative_03.prg maths_relative_03.bas
Windows
ugbc.c128.exe -O prg -o maths_relative_03.prg maths_relative_03.bas
For Microsoft Windows users we suggest using UGBASIC-IDE, which allows
you to download and compile this example with just one click.
In order to compile the example, type this command on the command line:
Linux
ugbc.c128z -O prg -o maths_relative_03.prg maths_relative_03.bas
Windows
ugbc.c128z.exe -O prg -o maths_relative_03.prg maths_relative_03.bas
For Microsoft Windows users we suggest using UGBASIC-IDE, which allows
you to download and compile this example with just one click.
In order to compile the example, type this command on the command line:
Linux
ugbc.c64 -O prg -o maths_relative_03.prg maths_relative_03.bas
Windows
ugbc.c64.exe -O prg -o maths_relative_03.prg maths_relative_03.bas
For Microsoft Windows users we suggest using UGBASIC-IDE, which allows
you to download and compile this example with just one click.
In order to compile the example, type this command on the command line:
Linux
ugbc.d32 -O bin -o maths_relative_03.bin maths_relative_03.bas
Windows
ugbc.d32.exe -O bin -o maths_relative_03.bin maths_relative_03.bas
For Microsoft Windows users we suggest using UGBASIC-IDE, which allows
you to download and compile this example with just one click.
In order to compile the example, type this command on the command line:
Linux
ugbc.d64 -O bin -o maths_relative_03.bin maths_relative_03.bas
Windows
ugbc.d64.exe -O bin -o maths_relative_03.bin maths_relative_03.bas
For Microsoft Windows users we suggest using UGBASIC-IDE, which allows
you to download and compile this example with just one click.
In order to compile the example, type this command on the command line:
Linux
ugbc.msx1 -O rom -o maths_relative_03.rom maths_relative_03.bas
Windows
ugbc.msx1.exe -O rom -o maths_relative_03.rom maths_relative_03.bas
For Microsoft Windows users we suggest using UGBASIC-IDE, which allows
you to download and compile this example with just one click.
In order to compile the example, type this command on the command line:
Linux
ugbc.pc128op -O k7 -o maths_relative_03.k7 maths_relative_03.bas
Windows
ugbc.pc128op.exe -O k7 -o maths_relative_03.k7 maths_relative_03.bas
For Microsoft Windows users we suggest using UGBASIC-IDE, which allows
you to download and compile this example with just one click.
In order to compile the example, type this command on the command line:
Linux
ugbc.sc3000 -O rom -o maths_relative_03.rom maths_relative_03.bas
Windows
ugbc.sc3000.exe -O rom -o maths_relative_03.rom maths_relative_03.bas
For Microsoft Windows users we suggest using UGBASIC-IDE, which allows
you to download and compile this example with just one click.
In order to compile the example, type this command on the command line:
Linux
ugbc.sg1000 -O rom -o maths_relative_03.rom maths_relative_03.bas
Windows
ugbc.sg1000.exe -O rom -o maths_relative_03.rom maths_relative_03.bas
For Microsoft Windows users we suggest using UGBASIC-IDE, which allows
you to download and compile this example with just one click.
In order to compile the example, type this command on the command line:
Linux
ugbc.mo5 -O k7 -o maths_relative_03.k7 maths_relative_03.bas
Windows
ugbc.mo5.exe -O k7 -o maths_relative_03.k7 maths_relative_03.bas
For Microsoft Windows users we suggest using UGBASIC-IDE, which allows
you to download and compile this example with just one click.
In order to compile the example, type this command on the command line:
Linux
ugbc.to8 -O k7 -o maths_relative_03.k7 maths_relative_03.bas
Windows
ugbc.to8.exe -O k7 -o maths_relative_03.k7 maths_relative_03.bas
For Microsoft Windows users we suggest using UGBASIC-IDE, which allows
you to download and compile this example with just one click.
In order to compile the example, type this command on the command line:
Linux
ugbc.zx -O tap -o maths_relative_03.tap maths_relative_03.bas
Windows
ugbc.zx.exe -O tap -o maths_relative_03.tap maths_relative_03.bas
For Microsoft Windows users we suggest using UGBASIC-IDE, which allows
you to download and compile this example with just one click.
If you have found a problem trying to run this example, if you think there is a bug or, more
simply, you would like it to be improved, open an issue for this example on GitHub.
Thank you!
open an issue
BACK TO EXAMPLES