如何设置if语句

时间:2014-03-04 17:18:49

标签: c bit-manipulation bitwise-operators

如何仅使用以下按位操作设置if语句:

  • <!/ LI>
  • &安培;
  • ^
  • |
  • +
  • &LT;&LT;
  • &GT;&GT;

例如:“如果x为负数,则添加15”

这意味着如果输入为x = 0xF0000000,那么我们就会生成0xF000000F。如果输入为x = 0x00000004,我们会生成0x00000004

1 个答案:

答案 0 :(得分:3)

如果数字为负数,您可以将15添加到数字中;如果数字为负数,则可以添加0,如下所示。如果值为负,则向右移动负数将改为1,否则为0。移动31将填充int或1或0。如果它是负数,则按0xF进行加权将设置为15,否则设置为0,导致x没有变化。

x += (x >> 31) & 0xF;

如果您担心将签名号码向右移动的实现依赖行为。您可以使用以下代码执行相同的操作,但是仍然依赖于数字的二进制补码表示。转换结果为01,乘法会将数字缩放到适当的值。

 x += (((unsigned)x >> 31) * 0xF);