implicit ubyte casting
Moritz Warning
moritzwarning at web.de
Thu Oct 1 09:19:41 PDT 2009
On Thu, 01 Oct 2009 10:16:08 -0400, 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
This is a troublesome behavior:
ubyte z = 5;
int x = -z; // x now is 251
int y = -1 * z; // y is now -5
More information about the Digitalmars-d-learn
mailing list