I have:
(gdb) display/t raw_data[4]<<8 24: /t raw_data[4]<<8 = 1111100000000 (gdb) display/t raw_data[5] 25: /t raw_data[5] = 11100111 (gdb) display/t (raw_data[4]<<8)|raw_data[5] 26: /t (raw_data[4]<<8)|raw_data[5] = 11111111111111111111111111100111 Why is the result on line 26 not 0001111111100111? Thanks.
edit: More specifically:
(gdb) display/t raw_data[5] 27: /t raw_data[5] = 11100111 (gdb) display/t 0|raw_data[5] 28: /t 0|raw_data[5] = 11111111111111111111111111100111 Why is the result on line 26 not 11100111?
raw_datais. There is very likely a signed/unsigned promotion at work here.