快速条件的意思是如果((status&0x3F)== 1){}

时间:2018-07-04 11:25:00

标签: swift

if((status&0x3F)== 1){} ..  状态在快速语言中是可变的。  此条件的含义是什么,&平均值和(状态&0x3F)值返回

2 个答案:

答案 0 :(得分:1)

0x3F为111111。因此,这意味着:

对于二进制系统表示形式中yourNumber的每一位,

使用and方法。 这种方式将数字的左部分截断。并将结果与​​1进行比较。

例如

77771111001100001,执行and后,该数字将转换为

100001。这样的结果就是false

但是对于77451111001000001),结果为1。结果为true

“和”功能的规则:0 & 0 = 0 ; 0 & 1 = 0; 1 & 0 = 1; 1 & 1 = 1.

答案 1 :(得分:1)

&按位AND 运算符。它比较两个操作数的位,如果两个操作数中的位均为1,则将相应的位设置为1,如果其中一个或两个均为0,则将其设置为0。 / p>

所以这句话:

((status & 0x3F) == 1)

正在将status0b111111(等效于0x3F的二进制组合,并检查结果是否正好是1。只有在后6位为status0b000001


在此if中:

if( (dtc24_state[2] & 0x8) == 0x8 ) {
    self.haldexABCDTC24State.text = status_str + " - UNKNOWN"
    self.haldexABCDTC24State.textColor = text_color
    active_or_stored_dtc = true
}

dct24_state是一个值数组。 dct24_state[2]的值与0x80b1000合并,并与0x8进行比较。这是在检查从右数第4位是否已设置。别的都无所谓。如果设置了右边的第4位,则if为true,并执行代码块。