byte + byte = int: why?

Steven Schveighoffer schveiguy at gmail.com
Fri Jan 18 17:15:09 UTC 2019


On 1/18/19 12:09 PM, Mek101 wrote:
> I have the following line of code:
> 
>      temp[fowardI] = temp[fowardI] + temp[backwardI];
> 
> Where temp is a byte array (byte[]). When I try to compile it dmd gives 
> me this error:
> 
>      source/hash.d(11,25): Error: cannot implicitly convert expression 
> `cast(int)temp[fowardI] + cast(int)temp[backwardI]` of type `int` to `byte`
> /usr/bin/dmd failed with exit code 1.
> 
> Meaning that the byte type doesn't have a + operator. I know by 
> experience that the pitfall came from C# (which I also use), and the 
> absence of the operator was justified because the CLI didn't support 
> addition between values smaller than an int, and also byte wasn't enough 
> "numberish" to be used as such, and I should have used int instead.
> 
> But why the D language doesn't implement the operator on byte?

What is 127 + 127? Answer: 254. Which if converted to a byte is -127. 
Not what you might expect if you are doing addition.

In fact, D promotes all integral types smaller than int to int to do 
arithmetic. And if the result might not fit into what you are assigning 
it to, it requires a cast or mask.

See documentation here: 
https://dlang.org/spec/type.html#usual-arithmetic-conversions

-Steve


More information about the Digitalmars-d-learn mailing list