LeetCode刷题(122)~最大数值【位运算】
【摘要】 题目描述
编写一个方法,找出两个数字a和b中最大的那一个。不得使用if-else或其他比较运算符。
示例:
输入: a = 1, b = 2
输出: 2
12
解答
Demo
int maximum(int a, int b) { int ans=a; // 异号处理 (a^b)>>31&&(a>>31)&&a...
题目描述
编写一个方法,找出两个数字a和b中最大的那一个。不得使用if-else或其他比较运算符。
示例:
输入: a = 1, b = 2
输出: 2
- 1
- 2
解答
Demo
int maximum(int a, int b) { int ans=a; // 异号处理 (a^b)>>31&&(a>>31)&&(ans=b); // 同号处理 (-(a^b)>>31)&&((a-b)>>31)&&(ans=b); return ans; }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
思路
- 假设最大值为a,分别对两个数进行同号、异号进行讨论
- 异号时,两个数进行异或运算,结果第32位一定为1,这个时候再提取a第32位,若为1,表示a是负数,因为异号,所以最大值一定是b【在异号时,c++中int类型是32位,正数的第三十二位是0,而负数的第三十二位则是1,利用异或运算,即相同为0,不同为1,进行判断是否为异号。】
- 同号时,同理,判断两数相减之后结果的正负号即可。
运行结果
Demo
int maximum(int a, int b) { int ans=a; ((long)a-(long)b)>>63&&(ans=b); return ans; }
- 1
- 2
- 3
- 4
- 5
运行结果
文章来源: haihong.blog.csdn.net,作者:海轰Pro,版权归原作者所有,如需转载,请联系作者。
原文链接:haihong.blog.csdn.net/article/details/108391260
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)