我正在阅读“Java The Complete Reference Ninth Edition”,作者给出了这个例子,用一个整数来创建一个Color对象,该整数对他所说的RGB值进行编码:
整数在16到23位中以红色组织,以绿色为单位组织 8到15,蓝色位0到7.以下是此构造函数的示例:
int newRed = (0xff000000 | (0xc0 << 16) | (0x00 << 8) | 0x00);
Color darkRed = new Color(newRed);
0xff000000 in hexadecimal is equivalent to 0b11111111000000000000000000000000 in binary
这是一个32位整数... 我理解按位操作,但我不明白的是:
在数字的开头有什么用?为什么不从零开始
答案 0 :(得分:4)
The Javadocs for Color
解释Java Color
类包含alpha通道以及RGB - 因此以全零开头的颜色将完全透明。 0xff000000
表示的颜色为不透明黑色。
在这种情况下,作者当然犯了错误。单参数构造函数忽略高字节。相反,它应该使用new Color(0xffc00000, true)
,如果他想指定alpha(或更简单地说,new Color(0xc0, 0, 0, 0xff)
)。
答案 1 :(得分:1)
我想你的意思是问为什么0xff000000被添加到聚会上
它实际上取决于实施
我的猜测是两种选择之一:
1.颜色对这些位没有任何作用,只是为了安全起见,你将不相关的位设置为1(因此红色溢出不会有任何不同)。
那是alpha通道(这比前者更有意义)
编辑:
现在我意识到你在谈论awt Color对象,所以正确答案是选项号。 2。