我需要将一个数字乘以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;
}发布于 2014-03-04 16:15:24
如果你有一个你满意的函数,当它是正的时候,测试MSB来检测一个负的位,如果是这样的话,取两者的补语(你没有说你是否可以使用-和+,但是你可以使用^和+),运行你的函数,然后再取两者的补语。
发布于 2014-03-04 17:01:05
使用两个补语将负数转换为正数。当你做完后,把正数转换成负数?
https://stackoverflow.com/questions/22176910
复制相似问题