如何不使用任何判断"if","switch"等来得到两个数之间较大的数
来源:互联网 发布:mac视频下载工具 编辑:程序博客网 时间:2024/05/29 18:36
今天在网上看到一道题,听说是某公司招实习生时的面试题,挺有意思的,按照一般人的思维模式,有比较就一定得有判断啊,对,刚开始我也是这样想的,这道题主要想考的是你对负数在计算机中是如何存储的,以及对算术位移和逻辑位移的理解和灵活运用:
其实方法很简单,就是相减后看符号位,将减的结果的符号右移移到未尾(最低位),转换为无符号数作为数组的下标:先看代码吧!
#include<iostream>using namespace std;int main(int argc,char *argv[]){ int x,y; cout << "输入两个数:"; cin >> x>>y; int buf[2]={x,y}; unsigned int z; z=x-y; z>>=31; cout <<buf[z]<<endl; return 0;}
看代码页就几行,但是为什么要把x和y的差用unsigned int 来保存呢;
看个例子:int c=a-b,当a<b时,c为负数,其最高位为符号位1,右移31bit,前面的31位用0来填充,虽然a-b是负数, 但是转换为无符号的数之后按正数看待,最后一位为1,所以结果就是1,就输出buf[1]较大,如果a>b,最高位为0,右移31bit,前31位用0填充,最后一位也是0,得到最后的结果就为0,输出buf[0];
总结一下:
1.基本思想:位操作,找符号位,因为2个数的相减,得到的结果不是正数就是负数或0,我们只需要取得符号位就可得到较大值;
2.把两个数的关系对应到一个数组中.
0 0
- 如何不使用任何判断"if","switch"等来得到两个数之间较大的数
- C语言笔试题精选1---求两个数之间较大的数,不使用if、while、switch、for、?:/以及任何比较语句
- 不使用if,?:及switch等实现求出两个数的较大值
- 一道腾讯的笔试题,不使用任何判断语句求出两个数中的较大者(即 if、if...else...、>、<、==、while等语句)
- 【面试题】不用if,条件表达式,switch等判断语句------找出两个数中较大的
- 选出两个数中较大者,不用if, ? : ,switch等判断语句.
- 不使用大于、小于逻辑判断来得到两个数的大小
- 不使用大于、小于逻辑判断来得到两个数的大小
- 不用”if“,”?:“,”switch“或其他判断语句,求两个数中较大的数或较小的数
- 比较两个数a、b的大小,不能使用大于/小于、if、switch,?:等判断语句
- 比较两个数a、b的大小,不能使用大于/小于、if、switch,?:等判断语句
- 不用任何比较判断找出两个数中较大的
- 不使用if,switch and 等值判断 求出两个int数中最大的那个数详解
- 不使用判断,找出两个数中的较大者
- 不使用 if switch 等 求出两个变量中的较大或(较小)的一个 11月13日
- 不用任何比较判断找出两个数中较大的数
- 不用任何比较判断找出两个数中较大的数。
- 用宏定义,不用?:和比较switch等求两个数中较大的数
- 通俗易懂数据库三范式
- 拷贝构造函数的类型为什么必须使用引用类型
- 缓存穿透与雪崩
- 程序员-如此生活
- lintcode:Interleaving Positive and Negative Numbers
- 如何不使用任何判断"if","switch"等来得到两个数之间较大的数
- 【FZU 2195】检查站点
- 顶层const与底层const
- jQuery框架
- hdu 2674 N!Again
- Android 之内容提供程序(Content Provider)
- 字符集研究之不同字符集的转换方式
- C++string流之istringstream,ostringstream,stringstream类介绍
- OC底层详解