如何仅使用以下按位操作设置if语句:
例如:“如果x为负数,则添加15”
这意味着如果输入为x = 0xF0000000
,那么我们就会生成0xF000000F
。如果输入为x = 0x00000004
,我们会生成0x00000004
。
答案 0 :(得分:3)
如果数字为负数,您可以将15
添加到数字中;如果数字为负数,则可以添加0
,如下所示。如果值为负,则向右移动负数将改为1,否则为0。移动31将填充int或1或0。如果它是负数,则按0xF
进行加权将设置为15,否则设置为0,导致x
没有变化。
x += (x >> 31) & 0xF;
如果您担心将签名号码向右移动的实现依赖行为。您可以使用以下代码执行相同的操作,但是仍然依赖于数字的二进制补码表示。转换结果为0
或1
,乘法会将数字缩放到适当的值。
x += (((unsigned)x >> 31) * 0xF);