Swift中的按位移位与Java不同

问题描述 投票:0回答:1

我试图将RGB转换为像Java一样的ColorInt。

Java:下面的代码返回'-16777216'表示黑色。

int a = 255;
int r = 0;
int g = 0;
int b = 0;

int hcol = 0;
hcol |= (a & 0xFF) << 24;
hcol |= (r & 0xFF) << 16;
hcol |= (g & 0xFF) << 8;
hcol |= b & 0xFF;
System.out.println(hcol);

Swift:据我所知,这应该与Java示例完全相同。但它只返回正数,而黑色为'0',其中'16777216'(非负数)为白色。

let a = 255
let r = 0;
let g = 0;
let b = 0;

var colInt = 0;
//colInt |= (a & 0xFF) << 24; (Adding this makes the variable even bigger)
colInt |= (r & 0xFF) << 16;
colInt |= (g & 0xFF) << 8;
colInt |= (b & 0xFF);

print("\(colInt)");

正如你在Swift示例中看到的那样,我没有alpha颜色。如果我添加它只是使colInt比RGB光谱中的最大颜色数量更高的数字。

java swift bit-manipulation operation
1个回答
0
投票

你最有可能在64位机器上运行,所以swift Int类型实际上是64位,而java int总是32位。你看到的那个“更高的数字”(4278190080)实际上是64位整数的0x00000000FF000000。使用Int32应该会产生预期的结果。

let a : Int32 = 255
let r : Int32 = 0;
let g : Int32 = 0;
let b : Int32 = 0;

var colInt : Int32 = 0;
colInt |= (a & 0xFF) << 24;
colInt |= (r & 0xFF) << 16;
colInt |= (g & 0xFF) << 8;
colInt |= (b & 0xFF);

print("\(colInt)");    //-16777216
© www.soinside.com 2019 - 2024. All rights reserved.