Negating a short?

Salih Dincer salihdb at hotmail.com
Wed Nov 6 16:25:40 UTC 2024


On Tuesday, 5 November 2024 at 17:32:00 UTC, Andy Valencia wrote:
> 
> integral promotion not done for -val
> 
> ```d
> I ended up with this, but is negating a short really this 
> problematic, or did I miss something?
>
>     static if (!__traits(isUnsigned, T)) {
>         if (val < 0) {
>             static if (__traits(getPointerBitmap, T)[0] < 
> int.sizeof) {
>                 val = cast(T)(-(cast(int)val));
>             } else {
>                 val = -val;
>             }
>         }
>     }
>
> ```

In response to Andy and Matheus, I think implementing your own 
kind might be a solution:

```d
void main()
{
   Short foo = { -21 };
   foo = foo * -2;
   assert(foo.s == 42);
}

struct Short
{
   short s;

   auto opBinary(string op: "*")(int rhs)
   {
     auto result = s * rhs;
     return Short(cast(short)result);
   }

   void opOpAssign(string op: "*")(int rhs)
   {
     s *= rhs;
   }
}
```

SDB at 79


More information about the Digitalmars-d-learn mailing list