【问题标题】:Setting nth bit of unsigned int [duplicate]设置无符号整数的第n位[重复]
【发布时间】:2015-04-06 06:56:36
【问题描述】:

给定一个无符号整数 x,我想将第 n 位设置为 y,并且 y 可以是 0 或 1。是否可以使用按位运算符创建表达式来执行此操作,同时避免使用任何条件语句?谢谢。

【问题讨论】:

标签: bitwise-operators


【解决方案1】:
x = (x & (~(1 << n))) | (y << n)

很简单。 (首先,清除nth 位,如果y1,则将nth 位设置为1。)

【讨论】:

  • 这个还是有条件的,哪怕是一行。
  • 谢谢!我从来没有考虑过这样做。
  • @Eun 条件是我的意思是不必使用 if-else 语句或类似语句检查 y 的值。
  • ...或者,更简洁:x = (x | (1 &lt;&lt; n)) &amp; (y &lt;&lt; n) - 此版本首先将 nth 位设置为 1。
【解决方案2】:
x ^= (-y ^ x) & (1 << n);

【讨论】:

  • 这不是无条件的。 OP想要这个没有任何条件
  • 我知道这一点,但我想知道是否可以将 y 合并到表达式中,以便用一个语句处理两种情况(y 为 0 或 1)。
  • @Eun 对不起,你是对的,我错过了。修正了我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多