For example, if color is 00000100, then greenzone is 00000000, redzone is 00000100 and bluezone is 00000000. Obviously b and d become 0, but c is a 3 bit value initialized with 00000100. That means c becomes 100.

If you shift the bits first, then assign them to the bitset, you will get the appropriate values. You can do this before or after assigning to the zone variables. 00000100 >> 2 is 00000001, which when assigned to the c bitset will be 001. That's what you want. Of course, you'd have to bit shift the greenzone by more than 2.