D arithmetic problem

Steven Schveighoffer schveiguy at yahoo.com
Wed Jun 3 05:12:22 PDT 2009


On Wed, 03 Jun 2009 02:20:33 -0400, Tim Matthews <tim.matthews7 at gmail.com>  
wrote:

> Paul D. Anderson wrote:
>> The behavior is consistent with the specification -- see  
>> http://www.digitalmars.com/d/1.0/type.html.
>>  Most C-based languages will do the same.
>>
>
> You are slightly missing the point. The point is byte should be unsigned  
> and a separate name for signed. Dot net actually has Byte for unsigned  
> and SByte for signed so its harder to make that error. Too late to  
> change now though.

Count me as one of the people who sees byte as signed.  In fact, C#  
confused me when I wanted to use an unsigned byte, and couldn't find  
ubyte.  I think it all depends on what you learned first.

Making byte unsigned and introducing sbyte would go against the current  
convention of "without a u is signed, with a u is unsigned".

BTW, with C#, the following code results in an error:

         static void Main(string[] args)
         {
             uint v;
             v = 31234;
             sbyte t = -1;
             v |= t;
             Console.Out.WriteLine(v);
         }

Eror: Cannot implicitly convert type 'sbyte' to 'uint'. An explicit  
conversion exists (are you missing a cast?)

I would be in favor of a similar behavior in D.

-Steve




More information about the Digitalmars-d mailing list