ubyte + ubyte = int

0xEAB desisma at heidel.beer
Wed Oct 26 21:10:54 UTC 2022


```d
@safe:

void main()
{
     import std.stdio : writeln;
     writeln(ubyte(4).toHexDigit);
}

ubyte toHexDigit(ubyte decimal) pure nothrow @nogc
{
     if (decimal < 10)
         return (decimal + ubyte('0'));

     if (decimal < 16)
         return (decimal - ubyte(10) + ubyte('A'));

     return '\xFF';
}
```

```
onlineapp.d(12): Error: cannot implicitly convert expression 
`cast(int)decimal + 48` of type `int` to `ubyte`
onlineapp.d(15): Error: cannot implicitly convert expression 
`cast(int)decimal - 10 + 65` of type `int` to `ubyte`
```

I guess, this fancy behavior is inherited from C.

I know this is advanced stuff, but the compiler *could* even 
prove that the calculation(s) won’t go beyond `ubyte.max`.


More information about the Digitalmars-d-learn mailing list