使用异或运算和与运算求取二者最大值和最小值(不使用判断语句求二者最小值)
2012-04-08 22:55
344 查看
(y^(x^y)&-(x<y))求取二者的最小值
如果x<y;则根据运算规则有,-(x<y)为-1,计算机中都是用补码表示数字的,所以计算机中-1表示为全1;所以在下一步的运算中(x^y)&-(x<y)得到的结果为(x^y);之后y^(x^y),根据异或运算的交换略,y^y^x结果为x;
如果x>y;则根据运算规则有,-(x<y)为-1,计算机中补码表示也是全为0,所以(x^y)&-(x<y)得到的结果为0,之后y^0为y;
综上所述,所以这个式子返回的是x和y的最小值。
经过以上的分析,我们可以很快推导出使用这些位运算计算二者最大值的方法,即(y^(x^y)&(x<y-1))或者(x^(x^y)&-(x<y));具体的推导过程和上面的一样。
如果x<y;则根据运算规则有,-(x<y)为-1,计算机中都是用补码表示数字的,所以计算机中-1表示为全1;所以在下一步的运算中(x^y)&-(x<y)得到的结果为(x^y);之后y^(x^y),根据异或运算的交换略,y^y^x结果为x;
如果x>y;则根据运算规则有,-(x<y)为-1,计算机中补码表示也是全为0,所以(x^y)&-(x<y)得到的结果为0,之后y^0为y;
综上所述,所以这个式子返回的是x和y的最小值。
经过以上的分析,我们可以很快推导出使用这些位运算计算二者最大值的方法,即(y^(x^y)&(x<y-1))或者(x^(x^y)&-(x<y));具体的推导过程和上面的一样。
相关文章推荐
- 找出两个int型变量的最大值和最小值,不使用if/:?/switch判断语句
- 不使用if、?:、switch及其他判断语句如何找出两个int型变量中的最大值和最小值
- 使用Python的判断语句模拟三目运算
- ACM最小表示法 最大表示法 模板 及其使用环境 判断字符串循环重构
- 获取数组中最大值和最小值(使用apply或扩展语句 spred operator)
- java 使用if else 结构语句判断三个数中的最大值
- 0006不使用判断语句求二者中的最小值
- 嵌套括号匹配问题/不使用比较运算求出两个数的最大值和最小值问题
- 求两个整数的最大值,不使用判断语句
- Python学习_我要使用if判断语句
- java-5.查找最小的K个元素-使用最大堆
- 【练习】题目:求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case 等关键字以及条件判断语句
- 使用异或运算对交换两个变量的数据
- 在Python中使用判断语句和循环的教程
- c++中的结构化语句 判断语句if 分支语句switch 循环语句 while 和 do while 循环语句for的使用
- C++使用两个栈实现一个可以获取栈中最大值和最小值的栈
- sql语句中的逻辑运算:或、与、异或
- 剑指Offer(Java版): 求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
- oracle 建表、最大ID、判断表是否已存在、字段的查询以及增删改、插入与修改语句
- 题目:求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)