This question is really tricky, I hope this kind of question is not going to appear in the real
test. Who would want to shift a value of type byte in the first place?
1) cast has a higher precedence than shift operator, therefore
0x81 is cast to 10000001 (this is -1 in decimal).
2) however, the left operand of a shift operator should be of type int or long, therefore, the left operand is promoted to an integer before the shift and becomes 32 bit:
11111111 11111111 11111111 10000001 (so here -1 as a byte is promoted to a huge integer because the later is unsigned, irrational!! I don't know why we add 1 instead of 0?!), Then we do the signed shift of an unsigned integer,(again irrationally treating an unsigned number with a signed one!) and get 0xFFFFFFE0;