implicit ubyte casting
jeremiep at gmail.com
Thu Oct 1 08:23:52 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
> 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
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