Frank Heckenbach wrote:
Lennart Thelander wrote:
I disagree somewhat. In this case the '-' is a unary operator, not an additive operator. A unary operator should evaluate before any other operator, at least in this case. The -10 should evaluate immediately as the simple value it is. Then the mod operator is evaluated. So you should not have to put any parenthesis around -10 to obtain the correct result.
Well, that's your personal opinion which is shared by C and related languages, including Borland Pascal.
But Adriaan explicitly asked about standard Pascal which follows the mathematical convention (see ISO 7185, 6.7.1) where there's no special priority of unary operators, e.g. in mathematics -2^2 equals -4, not 4.
You are right. But I wonder how many Pascal programmers are wrong here.... It is very tricky. What about a compiler warning ?
Another example:
program unary; begin writeln( -2 shr 1) end.
[P18:~] adriaan% gp --borland-pascal unary.pas [P18:~] adriaan% ./unary -1
[P18:~] adriaan% fpc -Mtp unary.pas Free Pascal Compiler version 2.5.1 [2010/10/19] for i386 Copyright (c) 1993-2010 by Florian Klaempfl Target OS: Darwin for i386 Compiling unary.pas Assembling unary Linking unary 6 lines compiled, 0.1 sec [P18:~] adriaan% ./unary 9223372036854775807
Regards,
Adriaan van Os