☰
  • 首页
  • 规则分类
  • 项目介绍
search
•••

按位取反需避免由类型提升产生的多余数据

10.2.11 ID_suspiciousPromotion
目录 › next › previous

8 位或 16 位整数按位取反时会被提升为 int 等类型,可能会产生非预期的多余数据。

示例:

uint8_t a = 0xCD;
uint8_t b = (~a) >> 4;   // Rather suspicious, ‘b’ is 0xF3

经“类型提升”,例中 ~a 在 16 位环境中为 0xFF32,在 32 位环境中为 0xFFFFFF32,高位的数据很可能是多余的。

应在取反后立即转为目标类型:

uint8_t a = 0xCD;
uint8_t b = uint8_t(~a) >> 4;   // OK, ‘b’ is 0x03

参考

MISRA C++ 2008 5-0-10
Copyright©2024 360 Security Technology Inc., Licensed under the Apache-2.0 license.