2 回答

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超7個(gè)贊
就是與運(yùn)算
在編程語(yǔ)言里
與運(yùn)算,兩個(gè)全是1,結(jié)果才是1
1 & 1 = 1 1 & 0 = 0 0 & 0 = 0 0 & 1 = 0 |
附:或運(yùn)算,有一個(gè)是1,結(jié)果就是1
1 | 1 = 1 1 | 0 = 1 0 | 0 = 0 0 | 1 = 1 |
你可以寫(xiě)個(gè)例子,看看結(jié)果
public class $ { public static void main(String[] args) { int states = 1 ; int state = 1 ; if ((state & states) != 0 ) { System.out.println( "a" ); } } } |

TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超10個(gè)贊
&是按位與運(yùn)算,也就是對(duì)state和states的每一個(gè)二進(jìn)制位進(jìn)行與運(yùn)算。像5&3就是(101)&(011)=(001),也就是5&3=1。運(yùn)算規(guī)則就如@xiaojianhx所述。
而(state & states) != 0的意思嘛,按字面上來(lái)理解就是:state表示某一個(gè)狀態(tài),而states表示一組狀態(tài),(state & states) != 0就是檢查states有沒(méi)有包含state這一狀態(tài)。
原理也簡(jiǎn)單,假如states可以包含3個(gè)這樣的狀態(tài)(長(zhǎng)度為3位),現(xiàn)在states包含了兩個(gè)狀態(tài),值為(101),而state表示的狀態(tài)的值為(001),state & states=(101)&(001)=(001),(001)!=0,所以states包含了state這一狀態(tài)。但如果states=(100),說(shuō)明states只包含一個(gè)狀態(tài),而state 仍然是(001),那么state & states=(100)&(001)=(000),(000)==0,所以states就不包含state這一狀態(tài)了。
如果要往states添加state狀態(tài)的話可以這么做:states=states|state;
這只是一種理解。一般代碼中也會(huì)常用到這種方法的。
添加回答
舉報(bào)