SonarQube Java 分析器,规则 S2183,我为什么要删除这个无用的移位?

SonarQube Java Analyser, rule S2183, why should I remove this useless shift?

我写了:

public static final int MY_GREAT_COLOR = (91 << 16) + (155 << 8) + 213 + (255 << 32);

声纳说:

New: Squid:S2183 Severity: CRITICAL, Message: Remove this useless shift

谁能告诉我为什么?这是否只是不应该对文字进行计算的事实,即使它增加了可读性?

255 << 32 溢出 Java(32 位)int,变为零。

你想要 long255L << 32 吗?

我猜 255 是你的 alpha 通道,在那种情况下我猜你想要 255 << 24

SonarQube 不知道您的意图,但正如 Toby 所说,它有一个正确的观点。

至于可读性,你也可以试试六边形代码(例如0xFF5B9BD5),很多开发者已经习惯了。当然,十进制数将完全不可读且难看。