判断两个数是否符号相反----位运算
发布日期:2021-10-03 20:32:36 浏览次数:21 分类:技术文章

本文共 601 字,大约阅读时间需要 2 分钟。

问题:写一个函数,判断给定的两个数字是否是符号相反的,不可以使用比较运算符。

例如 fun(-1, 100) == true;  fun(5,6)=false;  fun(-1,-2)=false; 同时,规定0属于正数。

在二进制表示中,最高位是1的话,就是负数。最高位为0则为正数。因此我可以想办法通过位运算来判断。1 ^0 = 1。所以 负数^正数=负数。其实就是类似于乘法了。

#include
#include
bool oppositeSigns(int x, int y){ return ((x ^ y) < 0);}int main(){ int x = 100, y = -100; if (oppositeSigns(x, y) == true) printf ("Signs are opposite"); else printf ("Signs are not opposite"); return 0;}
但是,这里用到了比较运算符。其实完全可以把  <0 的比较去掉,因为我们只需要知道第一位符号位即可。

bool oppositeSigns(int x, int y){    return ((x ^ y) >> 31);}
右移31位,则只剩下最高位符号位,不是0,就是1。

转载地址:https://blog.csdn.net/LaoJiu_/article/details/51325131 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:检测一个数能否被3整除----位运算
下一篇:OpenCV3.0 Beta + Windows10 + Visual Studio 2015 配置

发表评论

最新留言

网站不错 人气很旺了 加油
[***.192.178.218]2024年04月08日 22时32分09秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章