簡體   English   中英

Swift中的按位移位與Java不同

[英]Bitwise Shifting in Swift Different From Java

我試圖將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光譜中最大顏色的數量。

您很可能在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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM