2015-02-06 88 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