开发者论坛

 找回密码
 注册 (请使用非IE浏览器)
查看: 2274|回复: 0

[讨论] 不使用判断比较符比较两个整数的大小(位运算)

[复制链接]

0

精华

490

贡献

729

赞扬

管理员

Rank: 45Rank: 45Rank: 45Rank: 45Rank: 45

帖子
158
软币
3816
在线时间
576 小时
注册时间
2015-6-30
发表于 2017-8-12 23:12:13 | 显示全部楼层 |阅读模式
本帖最后由 rzt_tao 于 2017-8-12 23:20 编辑

在不使用判断操作符和比较操作符情况下判断两个整数的大小,
关于C# 的运算符可以查看官方说明:
https://msdn.microsoft.com/zh-cn/library/xt18et0d(v=vs.80).aspx
代码:
[C#] 纯文本查看 复制代码
int Min(int a ,int b)
{
        int c =a-b;
        int sa=sign(a);
        int sb=sign(b);
        int sc=sign(c);
        int diffab= sa^ sb;
        int sameab=filp(diffab);
        int returnB=sameab*sc +diffab*sa;
        int returnA=filp(returnB);
        return returnA * a+returnB*b;
}

int Max(int a ,int b)
{
        int c =a-b;
        int sa=sign(a);
        int sb=sign(b);
        int sc=sign(c);
        int diffab= sa^ sb;
        int sameab=filp(diffab);
        int returnA=sameab*sc +diffab*sa;
        int returnB=filp(returnA);
        return returnA * a+returnB*b;
}
int sign(int n)
{
        return filp((n>>31) & 1);
}
int filp(int n)
{
        return n^1;
}
 void Main(){
        Console.WriteLine("0x7ffffff与-100取最小值:{0}", Min(0x7fffffff,-100));
        Console.WriteLine("0x7ffffff与-100取最大值:{0}",Max(0x7fffffff,-100));
}


输出结果:
0x7ffffff与-100取最小值:-100
0x7ffffff与-100取最大值:2147483647

回复

使用道具 举报

Archiver|手机版|小黑屋|开发者网 ( 苏ICP备08004430号-2 )
版权所有:南京韵文教育信息咨询有限公司

GMT+8, 2024-4-20 19:30

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表