implicit ubyte casting

Saaa empty at needmail.com
Thu Oct 1 08:15:45 PDT 2009


Jeremie Pelletier wrote
> Saaa wrote:
>> I think is very bug-prone, isn't it obvious iub should be -5?
>>
>> ubyte ub = 5;
>> int iub = -ub; // iub now is 251
>>
>> What is the reasoning to do it this way?
>
> Minus toggles the most significant bit, be it on a signed or unsigned 
> type. When converting it to an int, the byte being signed or unsigned does 
> make a difference: when unsigned the number is copied as is, when signed 
> the most significant bit (bit 7) is shifted to the most significant bit of 
> the int (bit 31).
>
> Its therefore pretty standard logic, no warning is given since the entire 
> ubyte range fits within an int
>
> Jeremie
Thanks, but it is not that I do not know how it occurs more that
I should have asked whether people use this kind of logic.
For me it resulted in annoying bug like this:
for(int i = nloop;i<10;i++);//ubyte nloop is created quite a few lines 
above.




More information about the Digitalmars-d-learn mailing list