在 Swift 中左移 (<<) 实际上做了什么?
What does shift left (<<) actually do in Swift?
我正在搞一个 Flappy Bird 克隆,我无法弄清楚以下代码的含义
let birdCategory: UInt32 = 1 << 0
let worldCategory: UInt32 = 1 << 1
let pipeCategory: UInt32 = 1 << 2
let scoreCategory: UInt32 = 1 << 3
抱歉,如果这很明显,我已经尝试寻找答案但找不到。谢谢
首先,您发布了 Swift 代码,而不是 Objective-C。
但我会假设它是一个字节移位,就像在普通的旧 C 中一样。
a << x
相当于一个 * 2^x。通过将位向左移动一个位置,您可以将值加倍。这样做 x 次将产生 2^x 倍的值,当然,除非它溢出。
您可以了解数字在计算机中的表示方式here。
那就是bitwise left shift operator
基本上就是这样
// moves 0 bits to left for 00000001
let birdCategory: UInt32 = 1 << 0
// moves 1 bits to left for 00000001 then you have 00000010
let worldCategory: UInt32 = 1 << 1
// moves 2 bits to left for 00000001 then you have 00000100
let pipeCategory: UInt32 = 1 << 2
// moves 3 bits to left for 00000001 then you have 00001000
let scoreCategory: UInt32 = 1 << 3
你最终得到了
birdCategory = 1
worldCategory = 2
pipeCategory = 4
scoreCategory= 8
我正在搞一个 Flappy Bird 克隆,我无法弄清楚以下代码的含义
let birdCategory: UInt32 = 1 << 0
let worldCategory: UInt32 = 1 << 1
let pipeCategory: UInt32 = 1 << 2
let scoreCategory: UInt32 = 1 << 3
抱歉,如果这很明显,我已经尝试寻找答案但找不到。谢谢
首先,您发布了 Swift 代码,而不是 Objective-C。
但我会假设它是一个字节移位,就像在普通的旧 C 中一样。
a << x
相当于一个 * 2^x。通过将位向左移动一个位置,您可以将值加倍。这样做 x 次将产生 2^x 倍的值,当然,除非它溢出。
您可以了解数字在计算机中的表示方式here。
那就是bitwise left shift operator
基本上就是这样
// moves 0 bits to left for 00000001
let birdCategory: UInt32 = 1 << 0
// moves 1 bits to left for 00000001 then you have 00000010
let worldCategory: UInt32 = 1 << 1
// moves 2 bits to left for 00000001 then you have 00000100
let pipeCategory: UInt32 = 1 << 2
// moves 3 bits to left for 00000001 then you have 00001000
let scoreCategory: UInt32 = 1 << 3
你最终得到了
birdCategory = 1
worldCategory = 2
pipeCategory = 4
scoreCategory= 8