CodeQL 文档

左移超过类型宽度

ID: java/lshift-larger-than-type-width
Kind: problem
Security severity: 
Severity: warning
Precision: very-high
Tags:
   - correctness
Query suites:
   - java-security-and-quality.qls

单击以在 CodeQL 存储库中查看查询

用于左移操作的最大移位距离由其左侧的提升类型决定。当提升类型为 int 时,右侧的最低 5 位用作移位距离。当提升类型为 long 时,右侧的最低 6 位用作移位距离。

建议

将您移位的任何 int 的数量限制在 0-31 范围内,或在应用左移之前将其强制转换为 long

示例

以下行尝试将 int 左移 32 位。

long longVal = intVal << 32; // BAD

但是,将 int 左移 32 位等同于将其左移 0 位,即不应用移位。相反,应在应用移位之前将值强制转换为 long。然后,32 位的左移将起作用。

long longVal = ((long)intVal) << 32; // GOOD

参考

  • ©GitHub, Inc.
  • 条款
  • 隐私