题目:

给定两个32位整数a和b,返回a和b中较大的

要求:

不能做任何比较

第一种方法。得到a-b的值的符号,就可以知道是返回a还是返回b。

public int flip(int n){return n ^ 1;}public int sign(int n){return flip((n>>31) & 1);
}public int getMax1(int a,int b):int c = a - b;int scA = sign(c);int scB = flip(scA);return a*scA + b*scB

其中sign函数的功能是返回整数n的符号,正数和0则返回1,负数返回0(在二进制表达中符号位0表示正,1表示负,注意不要搞混)。flip函数的功能是:如果n为0返回1,如果n为1返回0.

 方法二。在方法一中存在一定的局限性,那就是如果a - b的值发生溢出,返回的结果就会不正确。方法二能很好的解决这个 问题,首先看如下的代码

public int getMax2(int a,int b){int c = a - b;int sa = sign(a);int sb = sign(b);int sc = sign(c);int difSab = sa ^ sb;int sameSab = flip(difSab);int returnA = difSab*sa + sameSab*sc;int returnB = flip(returnA);return a*returnA  + b*returnB}

解释说明:
如果a和b的符号不同(difSab = 1, sameSab = 0),则有:

如果a为0或正,那么b为负(sa = 1, sb = 0),应该返回a

如果b为0或正,那么a为负(sb = 1, sa = 0),应该返回b

如果a和b的符号相同(difSab = 0, sameSab = 0),此时一定不会发生溢出:

如果a - b为0或者为正(sc = 1),返回a
如果a - b为负(sc = 0 ),返回b

不用任何比较判断找出两个数中较大的数相关推荐

  1. c语言找两个数中的最大值,不用任何比较判断找出两个数中的最大值

    题目: 给定两个32位整数a和b,返回a和b中较大的一个,要求不能使用比较判断 思路一 : 判断a-b的符号,sign(int n) 函数实现 n为正数返回1,n为负数返回0.return a*scA ...

  2. 使用位运算技巧比较两个数中较大的数

    使用位运算技巧比较两个数中较大的数 作者:Grey 原文地址: 博客园:使用位运算技巧比较两个数中较大的数 CSDN:使用位运算技巧比较两个数中较大的数 题目要求 如何不要用任何比较判断符(>, ...

  3. 输入5个整数,找出5个数中的两位数

    输入: 输入5个整数,找出5个数中的两位数,并输出,并输出两位数的平均数,如果没有两位数就不输出.用while 解决 5 6 20 9 10 输出: 20 10 15

  4. 【leetcode】找出数组的第k大的数

    用快排,原始的快排 def quick_sort(nums,l,r):if l<=r:returntmp = nums[0]while l<r: while l<r and nums ...

  5. 如何快速找出Linux系统中的大文件?

    今日主题: 如何快速找出Linux系统中的大文件? 在前面的文章中,我们讲到了压测时磁盘空间被占满的问题,可以跟今天的文章结合着看. 在性能测试中,我们经常要关注系统磁盘空间,防止因磁盘空间占满而导致 ...

  6. 合并数字 — m个数字消除相邻的差的绝对值为1的两个数中较大的那一个,直到没有两个相邻的差的绝对值为 1 的数(动态数组定义)

    题目:合并数字 消除相邻的差的绝对值为1的两个数中较大的那一个.这一天,她得到了 m 个数字,她只能选出最左边的相邻的差的绝对值为 1 的两个数,保留较小的数,泯灭较大的数,直到没有两个相邻的差的绝对 ...

  7. leetcode 1: 找出两个数相加等于给定数 two sum

    问题描述 对于一个给定的数组,找出2个数,它们满足2个数的和等于一个特定的数,返回这两个数的索引.(从1开始) Given an array of integers, find two numbers ...

  8. c++一维数组找出五个数中的最大和最小值

    //代码段: #include<iostream> using namespace std; void main() { //c++一维数组五个数中找最大值和最小值int arr[5]={ ...

  9. 【Linux】使用du、df 和 sort 命令快速找出Linux系统中的大文件

    在性能测试中,我们经常要关注系统磁盘空间,防止因磁盘空间占满而导致的报错,那么具体怎么查看磁盘空间的大小呢?怎么找到占用空间最大的文件呢? 使用df.du并结合sort,可以快速找到系统中的大文件! ...

最新文章

  1. python商业爬虫_商业爬虫学习笔记day1
  2. unbutu 按照docker
  3. 【SSH项目实战】国税协同平台-26.分页功能编写
  4. Java程序员春招三面蚂蚁金服,1200页文档笔记
  5. Coursera台大机器学习技法课程笔记04-Soft-Margin Support Vector Machine
  6. 【算法】漫画:如何找到链表的倒数第n个结点?
  7. C语言必知的几个概念
  8. php artisan cache:clear命令报错
  9. linux查看vnc进程命令_linux命令:VNC服务的配置及使用
  10. ajax返回值demo
  11. OD查找QQ sessionkey教程
  12. 热血江湖游戏中断开服务器,为什么最近老是一进去游戏就提示与服务器断开 – 手机爱问...
  13. index.highlight.max_analyzed_offset 偏移量设置
  14. layui table 改变列表字体颜色
  15. c语言int2字节负数类型范围,C语言中的正负数以及数值溢出
  16. 官宣:CSDN发放福利!免费使用自定义域名功能一个月!
  17. 为什么好好的就不快乐了?
  18. 怎么用cmd强制修改密码
  19. MIROInvoiceBlockSetTolerancelimitsEnhancement_SAP刘梦_新浪博客
  20. 《MS17-010(永恒之蓝)—漏洞复现及防范》

热门文章

  1. 3.25 for循环
  2. 一句话搞定python六剑客
  3. iPhone X掉漆愈演愈烈?手机变成刮刮乐
  4. 架构设计中服务层的简单理解
  5. 命令行下使用javah命令生成.h文件,出现“错误: 无法访问android.app.Activity 找不到android.app.Activity的类文件”的解决方法...
  6. 诸法无我-悉达多 乔达摩
  7. Linux中设置定期备份oracle数据库
  8. SQL语句删除重复记录
  9. Oracle从零开始04——SQL语句03——单行函数
  10. Eclipse for Android 开发环境搭建及各种坑