Bit shifting a byte by more than 8 bit

前端 未结 2 1193
灰色年华
灰色年华 2020-12-19 14:23

In here When converting from bytes buffer back to unsigned long int:

  unsigned long int anotherLongInt;

  anotherLongInt = ( (byteArray[0] << 24) 
           


        
2条回答
  •  庸人自扰
    2020-12-19 15:12

    In that arithmetic context byteArray[0] is promoted to either int or unsigned int, so the shift is legal and maybe even sensible (I like to deal only with unsigned types when doing bitwise stuff).

    6.5.7 Bitwise shift operators

    The integer promotions are performed on each of the operands. The type of the result is that of the promoted left operand.

    And integer promotions:

    6.3.1.1

    If an int can represent all values of the original type the value is converted to an int; otherwise, it is converted to an unsigned int. These are called the integer promotions.

提交回复
热议问题