On Tuesday, 11 December 2012 at 12:24:14 UTC, d coder wrote:
Greetings

The following code prints FFFF0000. Similar thing happens when a and b are
bytes.
Is this intended?

Regards
- Puneet

void main()
{
  import std.stdio;
  ushort a = 0x55AA;
  ushort b = 0xAA55;
  writefln("%X", ~(a | b));
}

integer operations are always promoted to at least int. That's standard fare since C. I think it is a performance thing: Unpack into ints, oeprate, repack into ints.

D's stance regarding integer operations is "if it compiles, it creates the same output as in C".

It's kind of a gotcha, but not that big a deal.

Reply via email to