Swift中的按位移位与Java不同

时间:2018-11-29 02:01:14

标签: java swift bit-manipulation operation

我正在尝试将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);

迅速:据我所知,这应该与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光谱中最大颜色的数量。

1 个答案:

答案 0 :(得分:0)

您很可能在64位计算机上运行,​​因此快速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