### Most efficient way to read a bit from a byte?

What is the most efficient way to read a bit at a particular position in a byte?
one way is to & it with a suitably masked byte.
like (00111001 & 00000010) for reading the 2nd bit.
You could try using a union and a struct with specifically sized members
 ``12345678910111213141516171819202122232425262728`` ``````#include union Byte { unsigned char byte; struct { bool bit1 : 1; bool bit2 : 1; bool bit3 : 1; bool bit4 : 1; bool bit5 : 1; bool bit6 : 1; bool bit7 : 1; bool bit8 : 1; }; }; int main () { Byte b; b.byte = 0x65; // 0110 0101 std::cout << b.bit8 << b.bit7 << b.bit6 << b.bit5 << ' ' << b.bit4 << b.bit3 << b.bit2 << b.bit1 ; }`````` `0110 0101`
Last edited on
Here's another option:
 ``123456789101112`` ``````bool getBit(unsigned char byte, int position) // position in range 0-7 { return (byte >> position) & 0x1; } int main () { unsigned char b = 0x65; // 0110 0101 std::cout << getBit(b,7) << getBit(b,6) << getBit(b,5) << getBit(b,4) << ' ' << getBit(b,3) << getBit(b,2) << getBit(b,1) << getBit(b,0); }`````` `0110 0101`

Shifting and masking are some of the simplest operations that a processor can handle, these are very fast and efficient.
Last edited on
Topic archived. No new replies allowed.