int main() {
/* 符号位 和 左移运算符的类型提升 */
int8_t val1 = 0x10;
int8_t val2 = 0x84;
uint16_t val3 = (val1 << 8) | val2;
uint16_t val4 = (val1 << 8) + val2;
printf("%x %x\r\n", val3, val4); // ff84 f84
/* 位运算判断细节(具体得看编译器行为) */
uint8_t a = 0xFF;
bool result1 = ((a + 1) == (1 << 8)); // 不建议使用
bool result2 = a == ((1 << 8) - 1); // 建议使用
printf("%d %d\r\n",result1 ,result2); // 1 1
/* 位移操作数的位数限制(具体得看编译器行为) */
uint32_t c = 1;
uint32_t result3 = 1 << 32;
uint32_t result4 = c << 32;
printf("%x %x\r\n",result3, result4); // 0 1
return 0;
}