不用任何比较判断找出两个数中较大的数
题目:
给定两个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
不用任何比较判断找出两个数中较大的数相关推荐
- c语言找两个数中的最大值,不用任何比较判断找出两个数中的最大值
题目: 给定两个32位整数a和b,返回a和b中较大的一个,要求不能使用比较判断 思路一 : 判断a-b的符号,sign(int n) 函数实现 n为正数返回1,n为负数返回0.return a*scA ...
- 使用位运算技巧比较两个数中较大的数
使用位运算技巧比较两个数中较大的数 作者:Grey 原文地址: 博客园:使用位运算技巧比较两个数中较大的数 CSDN:使用位运算技巧比较两个数中较大的数 题目要求 如何不要用任何比较判断符(>, ...
- 输入5个整数,找出5个数中的两位数
输入: 输入5个整数,找出5个数中的两位数,并输出,并输出两位数的平均数,如果没有两位数就不输出.用while 解决 5 6 20 9 10 输出: 20 10 15
- 【leetcode】找出数组的第k大的数
用快排,原始的快排 def quick_sort(nums,l,r):if l<=r:returntmp = nums[0]while l<r: while l<r and nums ...
- 如何快速找出Linux系统中的大文件?
今日主题: 如何快速找出Linux系统中的大文件? 在前面的文章中,我们讲到了压测时磁盘空间被占满的问题,可以跟今天的文章结合着看. 在性能测试中,我们经常要关注系统磁盘空间,防止因磁盘空间占满而导致 ...
- 合并数字 — m个数字消除相邻的差的绝对值为1的两个数中较大的那一个,直到没有两个相邻的差的绝对值为 1 的数(动态数组定义)
题目:合并数字 消除相邻的差的绝对值为1的两个数中较大的那一个.这一天,她得到了 m 个数字,她只能选出最左边的相邻的差的绝对值为 1 的两个数,保留较小的数,泯灭较大的数,直到没有两个相邻的差的绝对 ...
- leetcode 1: 找出两个数相加等于给定数 two sum
问题描述 对于一个给定的数组,找出2个数,它们满足2个数的和等于一个特定的数,返回这两个数的索引.(从1开始) Given an array of integers, find two numbers ...
- c++一维数组找出五个数中的最大和最小值
//代码段: #include<iostream> using namespace std; void main() { //c++一维数组五个数中找最大值和最小值int arr[5]={ ...
- 【Linux】使用du、df 和 sort 命令快速找出Linux系统中的大文件
在性能测试中,我们经常要关注系统磁盘空间,防止因磁盘空间占满而导致的报错,那么具体怎么查看磁盘空间的大小呢?怎么找到占用空间最大的文件呢? 使用df.du并结合sort,可以快速找到系统中的大文件! ...
最新文章
- python商业爬虫_商业爬虫学习笔记day1
- unbutu 按照docker
- 【SSH项目实战】国税协同平台-26.分页功能编写
- Java程序员春招三面蚂蚁金服,1200页文档笔记
- Coursera台大机器学习技法课程笔记04-Soft-Margin Support Vector Machine
- 【算法】漫画:如何找到链表的倒数第n个结点?
- C语言必知的几个概念
- php artisan cache:clear命令报错
- linux查看vnc进程命令_linux命令:VNC服务的配置及使用
- ajax返回值demo
- OD查找QQ sessionkey教程
- 热血江湖游戏中断开服务器,为什么最近老是一进去游戏就提示与服务器断开 – 手机爱问...
- index.highlight.max_analyzed_offset 偏移量设置
- layui table 改变列表字体颜色
- c语言int2字节负数类型范围,C语言中的正负数以及数值溢出
- 官宣:CSDN发放福利!免费使用自定义域名功能一个月!
- 为什么好好的就不快乐了?
- 怎么用cmd强制修改密码
- MIROInvoiceBlockSetTolerancelimitsEnhancement_SAP刘梦_新浪博客
- 《MS17-010(永恒之蓝)—漏洞复现及防范》
热门文章
- 3.25 for循环
- 一句话搞定python六剑客
- iPhone X掉漆愈演愈烈?手机变成刮刮乐
- 架构设计中服务层的简单理解
- 命令行下使用javah命令生成.h文件,出现“错误: 无法访问android.app.Activity 找不到android.app.Activity的类文件”的解决方法...
- 诸法无我-悉达多 乔达摩
- Linux中设置定期备份oracle数据库
- SQL语句删除重复记录
- Oracle从零开始04——SQL语句03——单行函数
- Eclipse for Android 开发环境搭建及各种坑