我正在使用以下C语句,并尝试将其转换为Swift:
if (c1 & c2 & c3 & c4 & c5 & 0xf000)
我对C不太熟悉,所以我不确定if语句是在检查什么,但是c1,c2,c3,c4和& c5是整数,我知道“&”是一个按位运算符。我怎么能在Swift中实现这个相同的语句?
答案 0 :(得分:5)
在C中(如果我没记错),如果paranthesised表达式c1 & c2 & ...
的结果评估为非零值,则认为这是" true"。
在Swift中,类型安全很重要,按位操作的结果不会自动转换为真值(Bool
类型),所以你需要像
if c1 & c2 != 0 {
// do this
}
答案 1 :(得分:3)
您可能正在寻找以下内容:
let c1: UInt16 = 0x110F
let c2: UInt16 = 0x1101
let c3: UInt16 = 0x1401
let c4: UInt16 = 0x0001
let c5: UInt16 = 0x0A01
if c1 & c2 & c3 & c4 & c5 & 0xF000 != 0 {
println("Do Something, because some bits lined up!")
}
这里描述了Swift按位运算符:https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/AdvancedOperators.html
C和Swift中的按位运算符相同。在C中,该语句正在检查是否存在至少一个位位置,即每个变量(和文字)在具有“1”值的情况下具有共同点。那些常见的'1'位置被放入新值。 11001&例如,10101将落入10001。
两种语言的结果(基本上)都是整数。 C和Swift之间的真正区别在于,在C中,任何非“0”的值都可以解释为布尔值true
。你的C代码片段就是这么做的;将非零值解释为true
。另一方面,Swift区分整数和布尔值,并且需要特异性。这就是为什么在我的Swift片段中你必须专门检查一个非零的值。
if ( (c1 & c2 & c3 & c4 & c5 & 0xf000) != 0)
希望这至少有点帮助。