我真的很接近最终打破这个东西,但我仍然不知道如何注意这个溢出。
int multFiveEighths(int x) {
int y=((x<<2)+x);
int f=((y>>3)+1);
int z=(y>>3);
return f + ((~!(x>>31&1)+1) & (z+~f+1));
我乘以 5/8,并使用条件位表示:如果符号位为 1(数字为负数),则使用 f,否则使用 z。
其中一部分是包括像 C 表达式 (x*5/8) 这样的溢出行为
那么如何包含溢出行为呢?我只能使用这些操作:!~ & ^ | + << >> 没有循环,没有强制转换,没有函数声明。我离得太近了,这很痛苦。
编辑
我必须实现向零舍入。