我需要使用! ~ & ^ | + << >>
之类的按位运算将数字乘以3/16,舍入为零。到目前为止,我有以下几点,唯一的问题是当数字为负时它不起作用,它总是向下舍入而不是为零。我知道如果声明如果x是负数然后加15,那应该是按位的。但我不知道如何实现它,任何帮助都表示赞赏。
int ezThreeSixteenths(int x) {
int times_two = x << 1;
int times_three = times_two + x;
int divide_eight = times_three >> 4;
int a = 0b11111111;
int a1 = a << 8;
int a2 = a << 16;
int a3 = 0b11111 << 24;
int mask = a | a1 | a2 | a3;
int final = divide_eight & mask;
return final;
}
答案 0 :(得分:0)
如果你有一个你感到满意的功能,当它是正数时,测试MSB检测一个负位,如果是这样的话,取两个补码(你不说是否可以使用-
以及+
但您可以使用^
和+
),运行您的函数,然后再次使用二进制补码。
答案 1 :(得分:0)
使用二进制补码将负数转换为正数。那么当你完成后将正数转换回负数?