В вашем примере low
- это short
(обычно 16 бит). Таким образом, начальные нули не только избыточны, они предполагают, что ожидается 32-битный результат, и в этом случае старшие биты отбрасываются, поэтому, возможно, это делает цель кода более понятной.
На самом деле в этом случае
unsigned short low = a ;
будет достаточно, хотя, возможно, менее ясно.
Кроме того, вы не должны предполагать, что целочисленная ширина является подходящей, и вместо этого используйте типы <stdint.h>
:
uint32_t a = 0xFFFF1232;
uint16_t = a >> 16;
uint16_t = a & 0xFFFF;
Если вы используете VC ++, который не предоставляет этот заголовок, вы можете использовать эту реализацию