#include <iostream>

int main()
{
	uint8_t sizeOfEachVariableInBits[] = {4, 2, 1, 1};
	uint8_t numOfStoredVariables = sizeof(sizeOfEachVariableInBits);
	uint8_t variablesReadFromBits[numOfStoredVariables];
	uint8_t rshCounter = 0;
	
	uint8_t testValue = 0b10101110;

	/* expected result:
	variablesReadFromBits[0] = 0b00001110
	variablesReadFromBits[1] = 0b00000010
	variablesReadFromBits[2] = 0b00000000
	variablesReadFromBits[3] = 0b00000001
	*/
	
	for ( uint8_t i = 0; i < numOfStoredVariables; i++ )
	{
		variablesReadFromBits[i] = (testValue >> rshCounter) & ((1 << sizeOfEachVariableInBits[i]) - 1);
		rshCounter += sizeOfEachVariableInBits[i];
	}
	
	// display result
	for ( uint8_t i = 0; i < numOfStoredVariables; i++ )
	{
		printf( "variablesReadFromBits[%hhu] = 0b", i );
		
		for ( int8_t j = 7; j >= 0; j-- )
		{
			printf( "%hhu", ( variablesReadFromBits[i] >> j ) & 1 );
		}
		
		printf( "\n" );
	}
	
	return 0;
}