Signed word lengths and indexes

Don nospam at nospam.com
Thu Jun 17 06:04:09 PDT 2010


KennyTM~ wrote:
> On Jun 17, 10 18:59, Don wrote:
>> Kagamin wrote:
>>> Don Wrote:
>>>
>>>> (D has introduced ANOTHER instance of this with the ridiculous >>>
>>>> operator.
>>>> byte b = -1;
>>>> byte c = b >>> 1;
>>>> Guess what c is!
>>>> )
>>>
>>> :)
>>> Well, there was issue. Wasn't it fixed?
>>
>> No. It's a design flaw, not a bug. I think it could only be fixed by
>> disallowing that code, or creating a special rule to make that code do
>> what you expect. A better solution would be to drop >>>.
>>
> 
> I disagree. The flaw is whether x should be promoted to 
> CommonType!(typeof(x), int), given that the range of typeof(x >>> y) 
> should never exceed the range of typeof(x), no matter what value y is.

The range of typeof(x & y) can never exceed the range of typeof(x), no 
matter what value y is. Yet (byte & int) is promoted to int.
Actually, what happens to x>>>y if y is negative?

The current rule is:
x OP y      means
cast(CommonType!(x,y))x OP cast(CommonType!(x,y))y

for any binary operation OP.
How can we fix >>> without adding an extra rule?




> 
>>> More interesting case is
>>> byte c = -1 >>> 1;
> 


More information about the Digitalmars-d mailing list