[Oberon] Negative integer literals in Oberon
Jörg
joerg.straube at iaeth.ch
Mon Apr 27 10:16:37 CEST 2020
The whole discussion is based on the assumption that the MSB of a 32 bit value is the sign of an INTEGER.
That is not defined in the report. This is left to the implementation.
The only means in the Oberon-07 language to influence the sign bit is by using calculations involving "-".
0FFFFFFFFH has no sign operation, so can't be negative.
-6AB3H has a "-", so is negative
br
Jörg
Am 27.04.20, 10:04 schrieb "Oberon im Auftrag von Jörg" <oberon-bounces at lists.inf.ethz.ch im Auftrag von joerg.straube at iaeth.ch>:
How the sign bit for INTEGER values have to be stored is NOT defined in the report. This is part of the presentation layer that is deliberately left to the implementation.
1. Should the following assertion be successful?
ASSERT(ABS(0FFFFFFFFH) = 0FFFFFFFFH);
No, on a 32 bit machine with simple presentation layer implementation
Yes, on a 32 bit machine with clever presentation layer implementation.
Yes, on a 64 bit machine.
2. Should the compiler accept the following statement?
i := i DIV 0FFFFFFFFH;
Yes, why not? Just look at the case where INTEGER is 8 bytes.
But be aware: as I said H has two different flavors: one H usage is used in INTEGER arithmetic (just use decimal notation and hexadecimal notions for the same INTEGER values, there I wonder why you would do that anyway). And the second H usage (and this is in my experience the usage most have in mind when they use H: low-level programming where you need bit patterns and don't care about the internal presentation layer of INTEGERs that is - as we know - not defined in the Oberon report.
Jörg
--
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