首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何乘以三.十六

问如何乘以三.十六
EN

Stack Overflow用户
提问于 2014-03-04 16:03:29
回答 2查看 162关注 0票数 4

我需要将一个数字乘以3/16,舍入为零,仅使用按位运算(如! ~ & ^ | + << >> )。到目前为止,我有以下问题,唯一的问题是,它不工作时,数字是负的,它总是舍入,而不是零。我知道,如果x是负的,那么应该加上15,但我不知道如何实现它,任何帮助都是值得感谢的。

代码语言:javascript
复制
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;
}
EN

回答 2

Stack Overflow用户

发布于 2014-03-04 16:15:24

如果你有一个你满意的函数,当它是正的时候,测试MSB来检测一个负的位,如果是这样的话,取两者的补语(你没有说你是否可以使用-和+,但是你可以使用^和+),运行你的函数,然后再取两者的补语。

票数 0
EN

Stack Overflow用户

发布于 2014-03-04 17:01:05

使用两个补语将负数转换为正数。当你做完后,把正数转换成负数?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22176910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档