判断两个数是否符号相反----位运算

论坛 期权论坛 脚本     
匿名技术用户   2020-12-28 10:52   102   0

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

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

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

#include<stdbool.h>
#include<stdio.h>

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。


分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP