On Friday, 15 March 2024 at 00:21:42 UTC, H. S. Teoh wrote:
On Thu, Mar 14, 2024 at 11:39:33PM +0000, Liam McGillivray via Digitalmars-d-learn wrote: [...]
I tried to rework the functions to use bitwise operations, but it was difficult to figure out the correct logic. I decided that it's not worth the hassle, so I just changed the value storage from `bool[3]` to `ubyte`.
[...]

Just wanted to note that while in theory bool[3] could be optimized by the compiler for compact storage, what you're most likely to get is 3 bytes, one for each bool, or perhaps even 3 ints (24 bytes). When dealing with units of data smaller than a byte, you generally need to do it manually, because memory is not addressable by individual bits, making it difficult to implement things like slicing an array of bool. So the compiler is most likely to simplify things by making it an array of bytes rather than emit complex bit manipulation code to make up for the lack of bit-addressability in the underlying hardware.

Using bit operators like others have pointed out in this thread is probably the best way to implement what you want.

T

I'm curious as to what "manual implementation" would mean, since clearly making my own struct with `bool[3]` doesn't count. Does D have features for precise memory manipulation?

Anyway, I'm surprised that D has a special operator `&=` for doing bit manipulation on integers, especially given that the steps to convert an int into a bool array is more complicated. I would imagine the former would be a rather niche thing.
  • Re: Challenge: M... Richard (Rikki) Andrew Cattermole via Digitalmars-d-learn
    • Re: Challen... Liam McGillivray via Digitalmars-d-learn
      • Re: Cha... Richard (Rikki) Andrew Cattermole via Digitalmars-d-learn
    • Re: Challen... Liam McGillivray via Digitalmars-d-learn
      • Re: Cha... Richard (Rikki) Andrew Cattermole via Digitalmars-d-learn
        • Re:... Liam McGillivray via Digitalmars-d-learn
          • ... Basile B. via Digitalmars-d-learn
            • ... Richard (Rikki) Andrew Cattermole via Digitalmars-d-learn
              • ... Basile B. via Digitalmars-d-learn
          • ... H. S. Teoh via Digitalmars-d-learn
          • ... Liam McGillivray via Digitalmars-d-learn
            • ... H. S. Teoh via Digitalmars-d-learn
  • Re: Challenge: M... Salih Dincer via Digitalmars-d-learn
  • Re: Challenge: M... Basile B. via Digitalmars-d-learn
  • Re: Challenge: M... Daniel N via Digitalmars-d-learn
    • Re: Challen... Liam McGillivray via Digitalmars-d-learn
      • Re: Cha... Richard (Rikki) Andrew Cattermole via Digitalmars-d-learn

Reply via email to