implicit ubyte casting

Jeremie Pelletier jeremiep at
Thu Oct 1 08:23:52 PDT 2009

Saaa wrote:
> 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.

Then why use an ubyte instead of a byte or an int?

You could also just do:
for(int i = cast(byte)nloop; i < 10; i++)


More information about the Digitalmars-d-learn mailing list