C位运算符和if语句转换为Swift?

时间:2015-02-18 04:25:07

标签: ios c swift

我正在使用以下C语句,并尝试将其转换为Swift:

if (c1 & c2 & c3 & c4 & c5 & 0xf000)

我对C不太熟悉,所以我不确定if语句是在检查什么,但是c1,c2,c3,c4和& c5是整数,我知道“&”是一个按位运算符。我怎么能在Swift中实现这个相同的语句?

2 个答案:

答案 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片段中你必须专门检查一个非零的值。

顺便说一句,您可以将您的c片段更改为我在下面的内容并具有逻辑等效内容,以及匹配Swift片段。

if ( (c1 & c2 & c3 & c4 & c5 & 0xf000) != 0)

希望这至少有点帮助。