'int' is enough for 'length' to migrate code from x86 to x64
via Digitalmars-d
digitalmars-d at puremagic.com
Sat Nov 22 06:06:08 PST 2014
On Saturday, 22 November 2014 at 11:12:06 UTC, Marc Schütz wrote:
> I'd say that when two values are to be subtracted (signed or
> unsigned), and there's no knowledge about which one is larger,
> it's more useful to get a signed difference. This should be
> correct in most cases, because I believe it is more likely that
> the two values are close to each other. It only becomes a
> problem when they're an opposite sides of the value range.
Not being able to decrement unsigned types would be a disaster.
Think about unsigned integers as an enumeration. You should be
able to both take the predecessor and successor of the value.
This is also in line with how you formalize natural numbers in
math:
0 == zero
1 == successor(zero)
2 == successor(successor(zero))
This is basically a unary representation of natural numbers and
it allows both addition and subtraction. Unsigned int should be
considered a binary representation of the same capped at max
value.
Bearophile has given a sensible solution a long time ago, make
type coercion explicit and add a weaker coercion operator. That
operator should prevent senseless type coercion, but allow
system-level-coercion over signedness. Problem fixed.
More information about the Digitalmars-d
mailing list