[Oberon] Size of LONGINT in ETHOberon
Jörg
joerg.straube at iaeth.ch
Tue Feb 12 11:01:42 CET 2019
Dieter
Let's look at the internal representation of a LONGINT (bits 0..31 = 32 bits)
You basically have two parts:
- the highest bit (bit 31) is used for the sign
- the rest (bits 0..30) are the value of the LONGINT.
When using a hexadecimal representation, it's like this
00000000H .. 7FFFFFFFH are positive as the bit 31 is 0
80000000H .. FFFFFFFFH are negative as the bit 31 is 1
Your program calculates 2^x, x from 0..31.
2^31 is in hex 80000000H. So you see, according to the explanation above this is a negative nbr.
The largest positive number is 2^31-1 = 7FFFFFFFH = 2'147'483'647
br
Jörg
Am 12.02.19, 10:36 schrieb "Oberon im Auftrag von Dieter" <oberon-bounces at lists.inf.ethz.ch im Auftrag von d.gloetzel at web.de>:
I am using:
ETH PlugIn Oberon for WindowsTM / Win32 2.5 (18.12.2010)
on Windows Vista Version 6.2.9200
According to NW (Programming in Oberon,Steps beyond Pascal and Modula)
the size of LONGINT is +/- 2147483647
However, when I run
==================================================
MODULE powerof2;
IMPORT Out;
PROCEDURE power*;
VAR i : INTEGER; value : LONGINT;
BEGIN
i := 0; value := 1;
WHILE i < 32 DO
Out.Ln(); Out.Int(i,5); Out.Int(value,20);
INC(i); value := 2 * value;
END;
END power;
BEGIN
END powerof2.power
===================================================
I get
===================================================
0 1
1 2
2 4
3 8
4 16
5 32
6 64
7 128
8 256
9 512
10 1024
11 2048
12 4096
13 8192
14 16384
15 32768
16 65536
17 131072
18 262144
19 524288
20 1048576
21 2097152
22 4194304
23 8388608
24 16777216
25 33554432
26 67108864
27 134217728
28 268435456
29 536870912
30 1073741824
31 -2147483648
=============================
Has anybody got an explanation?
Thanks and bye Dieter
--
Oberon at lists.inf.ethz.ch mailing list for ETH Oberon and related systems
https://lists.inf.ethz.ch/mailman/listinfo/oberon
More information about the Oberon
mailing list