if((status&0x3F)== 1){} .. 状态在快速语言中是可变的。 此条件的含义是什么,&平均值和(状态&0x3F)值返回
答案 0 :(得分:1)
0x3F为111111
。因此,这意味着:
使用and
方法。
这种方式将数字的左部分截断。并将结果与1
进行比较。
例如
7777
是1111001100001
,执行and
后,该数字将转换为
100001
。这样的结果就是false
。
但是对于7745
(1111001000001
),结果为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)
正在将status
与0b111111
(等效于0x3F
的二进制组合,并检查结果是否正好是1
。只有在后6位为status
是0b000001
。
在此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]
的值与0x8
或0b1000
合并,并与0x8
进行比较。这是在检查从右数第4位是否已设置。别的都无所谓。如果设置了右边的第4位,则if
为true,并执行代码块。