按位运算符在操场上给出不同的结果

时间:2014-09-14 04:52:01

标签: ios iphone swift bit-manipulation bitwise-operators

当我在swift playground中使用按位运算符时,147<< 24给了我2,466,250,752。但是,在我的iPhone上运行相同的操作员并打印结果给了我-1828716544。为什么它会给出不同的结果,我该如何解决这个问题?

1 个答案:

答案 0 :(得分:4)

这是32位与64位整数的问题,因为结果 左移<<与其操作数的类型相同。

Playground使用64位架构,因此

147 << 24 = 0x0000000000000093 << 24 = 0x0000000093000000 = 2466250752

在32位设备上,147是32位签名整数,因此

147 << 24 = 0x00000093 << 24 = 0x93000000 = -1828716544

为负(符号位等于1)。

但是,结果适合32位无符号整数,所以这个 会在两种架构上给出相同的结果:

let x = UInt32(147) << 24 // 2466250752