2015-02-06 87 views
4

給定一個unsigned int x,我想將第n位設置爲y,並且y可以是0或1.是否可以使用按位運算符創建表達式,以避免使用任何條件語句?謝謝。設置unsigned int的第n位

+1

請仔細閱讀[如何提問](http://stackoverflow.com/help/how-to-ask)。 – segarci 2015-02-06 07:26:13

回答

3
x = (x & (~(1 << n))) | (y << n) 

這很簡單。 (首先,清除n個位,並設置n個位1如果y1。)

+0

即使它在一行中,這仍然有一個條件。 – Eun 2015-02-06 07:39:08

+0

謝謝!我從來沒有考慮過這樣做。 – user95297 2015-02-06 07:39:19

+0

@Eun按條件我的意思是無需使用if-else語句或類似的東西來檢查y的值。 – user95297 2015-02-06 07:40:46

0
x ^= (-y^x) & (1 << n); 
+0

這不是無條件的。 OP沒有任何條件需要這個 – Eun 2015-02-06 07:30:39

+0

我意識到這一點,但我想知道是否有可能將y併入到表達式中,以便兩個case(y都是0或1)都可以用一個語句處理。 – user95297 2015-02-06 07:31:49

+0

@Eun對不起,你錯了,我錯過了。修正了我的答案。 – emlai 2015-02-06 07:41:13