这个代码有什么问题,数字溢出警告

时间:2017-04-11 03:50:49

标签: java android colors

fillColor = (fillColor & (0xFF << 24)) | (colorRGB & 0xFFFFFF);

以上是我的代码,我认为这应该没问题。但Android Studio给我一个警告:

  

表达式中的数字溢出少...(Ctrl + F1)

     

此检查检查计算过程中溢出的表达式,即:a = 1.0 / 0.0;

我找不到代码的问题,请帮忙。

1 个答案:

答案 0 :(得分:4)

0xFF << 24等于0xFF000000&#34;技术上&#34;并不适合作为有符号值的int(例如,更改&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;

这&#34; hack&#34;将值设置为long,但随后将其强制转换为int。相同的位最终会出现在值中,但是演员特别告诉编译器您很乐意以这种方式截断值。

(int)((long)0xFF << 24);

因此,为了特别修复您的代码,我将0xFF << 24扩展为long(注意尾随L),然后将其转换为int。

fillColor = (fillColor & (int)0xFF000000L) | (colorRGB & 0xFFFFFF);

另见Why is Java able to store 0xff000000 as an int?