uint32_t num = (~((uint8_t)0xFF) & 0x12345678);
误以为num计算结果为0x00000000;
实则num值为0x12345600;
原因为(uint8_t)0xFF在进行按位取反前已强制转换为32位的数据,故取反后的值为0xFFFFFF00,按位与0x12345678得到0x12345600。
uint32_t num = (~((uint8_t)0xFF) & 0x12345678);
误以为num计算结果为0x00000000;
实则num值为0x12345600;
原因为(uint8_t)0xFF在进行按位取反前已强制转换为32位的数据,故取反后的值为0xFFFFFF00,按位与0x12345678得到0x12345600。