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