LeetCode刷题(122)~最大数值【位运算】

tech2024-07-05  58

题目描述

编写一个方法,找出两个数字a和b中最大的那一个。不得使用if-else或其他比较运算符。

示例:

输入: a = 1, b = 2 输出: 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; }

思路

假设最大值为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; }

运行结果

海轰Pro 认证博客专家 C/C++ 微信小程序 微信小程序:「海轰Pro」微信公众号:「海轰Pro」知乎:「海轰Pro」微博:「海轰Pro」
最新回复(0)