Integer promotion... what I'm missing? (It's monday...)

Max Samuha maxter at i.com.ua_spamless
Wed Jun 28 00:56:43 PDT 2006


On Tue, 27 Jun 2006 12:33:32 -0700, Kirk McDonald
<kirklin.mcdonald at gmail.com> wrote:

>Alexander Panek wrote:
>> If you take a look at how comparison works, you'll know why this one fails.
>> 
>> Lets take an uint a = 16; as in your example:
>> 00000000 00000000 00000000 00010000
>> 
>> And now a signed integer with the value -1:
>> 10000000 00000000 00000000 00000001
>> 
>
>Your point still stands, but -1 is represented as:
>11111111 11111111 11111111 11111111
>
>http://en.wikipedia.org/wiki/Two%27s_complement
>
>> You might guess which number is bigger, when our comparison is done 
>> binary (and after all, that's what the processor does) :)
>> 
>> Regards,
>> Alex
>> 
>> Paolo Invernizzi wrote:
>> 
>>> Hi all,
>>>
>>> What I'm missing?
>>>
>>>     uint a = 16;
>>>     int b = -1;
>>>     assert( b < a ); // this fails! I was expecting that -1 < 16
>>>
>>> Thanks
>>>
>>> ---
>>> Paolo

Maybe it's not a bug but it is very confusing, no matter how integer
operations work internally. Compiler should give at least a warning
about incompatibe types, or try to cast uint to int implicitly or
require an explicit cast.



More information about the Digitalmars-d-learn mailing list