不用任何比较判断找出两个数中较大的数。
2016-09-17 09:38
337 查看
不用任何比较判断找出两个数中较大的数。
描述:给定两个32位整数a和b,返回a和b中较大的。
方法1:得到a-b的值的符号。
局限性:如果a-b的值出现溢出,返回结果就不正确了。
方法2:彻底解决溢出问题。
来自《程序员代码面试指南》
描述:给定两个32位整数a和b,返回a和b中较大的。
方法1:得到a-b的值的符号。
局限性:如果a-b的值出现溢出,返回结果就不正确了。
public int flip(int n) { return n^1; } public int sign(int n) { return flip((n>>33)&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; }
方法2:彻底解决溢出问题。
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 = filp(difSab); int returnA = difSab * sa + sameSab * sc; int returnB = flip(returnA); return a * returnA + b * returnB; }
来自《程序员代码面试指南》
相关文章推荐
- 不用任何比较判断找出两个数中较大的
- 不用任何比较判断找出两个数中较大的数
- 不用任何比较判断找出两个数中较大的数
- 两个变量a,b,不用判断语句,找出两个中比较大的那个变量
- 两个变量a,b,不用判断语句,找出两个中比较大的那个变量
- 位运算---不用任何比较判断找出两个数中的最大值
- 有两个变量a和b,不用“if”、“? :”、“switch”或其他判断语句,找出两个数中比较大的
- 两个变量a,b,不用“if”,“? :”,switch或者其它判断语句,找出两个数中间比较大的
- 有两个变量a 和 b,不用if、?: 、switch 或者其他判断语句,找出两个数中比较大的那个
- 有两个变量a 和 b,不用if、?: 、switch 或者其他判断语句,找出两个数中比较大的那个
- 【面试题】不用if,条件表达式,switch等判断语句------找出两个数中较大的
- 用Groovy实现判断两个int数值大小(不用比较运算符,考虑溢出)
- 有两个变量a和b,不用if等判断语句,求两者较大的值
- 不用判断语句比较两个数字大小
- 今天学习时突然联想到这样一个有趣但无用的问题:利用C语言(不能是其他语言)求两个整数的较大/小值-----要求不用if、三目?、switch、循环、数组、加减乘除求余、位运算符以及任何库函数
- 不用判断语句实现两个整数的比较
- 选出两个数中较大者,不用if, ? : ,switch等判断语句.
- 不用”if“,”?:“,”switch“或其他判断语句,求两个数中较大的数或较小的数
- 不用任何比较操作判断正整数a和b的大小
- 用宏定义,不用?:和比较switch等求两个数中较大的数