Jest lepiej, ale na testach nadal wyskakują mi błędy. Oprócz konwersji muszę jeszcze ustawić wynikowe bity w odpowiednich dla nich miejscach w 16-bitowym słowie.
#define RGB16 unsigned short
RGB16 colorConvert( unsigned char r, unsigned char g, unsigned char b )
{
return(( r & ~( 0x07 ) ) << 8 ) |(( g & ~( 0x03 ) ) << 3 ) |( b >> 3 );
}
PASS find_exponent( 0, 0, 0 ) { return 0; } => 0000000000000000 == 0000000000000000
PASS find_exponent( 255, 255, 255 ) { return 65535; } => 1111111111111111 == 1111111111111111
FAILED find_exponent( 255, 0, 0 ) { return 63488; } => 1111100000000000 == 0000000000011111
PASS find_exponent( 0, 255, 0 ) { return 2016; } => 0000011111100000 == 0000011111100000
FAILED find_exponent( 0, 0, 255 ) { return 31; } => 0000000000011111 == 1111100000000000
PASS find_exponent( 128, 128, 128 ) { return 33808; } => 1000010000010000 == 1000010000010000
FAILED find_exponent( 255, 128, 128 ) { return 64528; } => 1111110000010000 == 1000010000011111
PASS find_exponent( 128, 255, 128 ) { return 34800; } => 1000011111110000 == 1000011111110000
FAILED find_exponent( 128, 128, 255 ) { return 33823; } => 1000010000011111 == 1111110000010000
FAILED find_exponent( 32, 64, 128 ) { return 8720; } => 0010001000010000 == 1000001000000100
FAILED find_exponent( 64, 32, 128 ) { return 16656; } => 0100000100010000 == 1000000100001000
FAILED find_exponent( 192, 168, 160 ) { return 50516; } => 1100010101010100 == 1010010101011000