一道简单的面试题

excited_lamb 2011-08-16 07:37:40
求较小的值,不能用 比较运算符 if-else ?: while for 内嵌汇编 递归 第三方函数
int Min(int a, int b)
{
//write code here
}
...全文
7328 219 打赏 收藏 转发到动态 举报
写回复
用AI写文章
219 条回复
切换为时间正序
请发表友善的回复…
发表回复
cjcxjstc 2011-08-25
  • 打赏
  • 举报
回复
int Min(int a, int b)
{
int *v1 = &a;
return v1[a>b];
}

也是借鉴了!
iamnobody 2011-08-25
  • 打赏
  • 举报
回复
[Quote=引用 59 楼 a316181444 的回复:]
引用 55 楼 coldmooon 的回复:
还说简单,不带这样坑人的.
我翻出来Intel软件开发手册第2卷才搞定.
这样一坨代码看着真不爽,肯定有简单的办法.
睡了.明天上班继续琢磨.

表示同情。试试我的代码。。
[/Quote]
你的代码不行的,,人家才是高手,,要考虑溢出的。
iamnobody 2011-08-25
  • 打赏
  • 举报
回复
防溢出,通俗完美版!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

int min(int a ,int b)
{
int c[2] = {b,a};
int e,f,diff;
const int HIGHEST = 1<<(sizeof(int)*8-1);
e = a ^ b & HIGHEST;
f = (a - b) & HIGHEST;
e &&((diff = (HIGHEST & a) && true)||true)||(diff = f && true);

return c[diff];

};
zhouyelihua 2011-08-24
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 pathuang68 的回复:]
引用 12 楼 haorengoodman 的回复:

引用 9 楼 jimoxiaosage 的回复:
int max = ((a+b)+abs(a-b))/2;
这下对了吧。
用到了match.h
这个比较好!

这个ms就较大值吧。:)
[/Quote]

math。h之中就含有if-else
jernymy 2011-08-24
  • 打赏
  • 举报
回复
留个爪印···
zhchyun2008 2011-08-24
  • 打赏
  • 举报
回复
[Quote=引用 47 楼 coldmooon 的回复:]
墙上有血...
int Min(int a, int b)
{
int al = a & 0xFFFF, ah = a >> 16 & 0xFFFF;
int bl = b & 0xFFFF, bh = b >> 16 & 0xFFFF;
int cl = al - bl;
int ch = ah - bh - (cl >> 16 &am……
[/Quote]
学习下,这么折磨人
limang89 2011-08-24
  • 打赏
  • 举报
回复
我就看看,不说话 :-)
风云剑客 2011-08-24
  • 打赏
  • 举报
回复
return a<b?a:b;
RangersPerson 2011-08-24
  • 打赏
  • 举报
回复
int Min(int a,int b)
{
unsigned uHightValue = ((unsigned int)(a - b)) >> (sizeof(int) * 8 - 1);
return (a * uHightValue + b * (1 - uHightValue ));
}

//这个是按照差值的最高位来实现的 sizeof(int)一定不能少 这样是为了按照机器整形的字节数来得到最高位 尔不是假设机器的整形的字节数
hackbuteer1 2011-08-23
  • 打赏
  • 举报
回复
这个不能直接先用a-b进行计算的,这样有可能会出现超出int表示范围的问题,最好的方法就是,先判断a和b的符号,符号不同的时候,直接返回负数,就是那个比较小的数了。。
符号相同的时候,做相减运算,a-b,然后判断相减结果的符号位是0还是1,来判断最小的那个数就可以了。。
代码如下:
int Min(int a,int b)
{
return (((a >> 31 == 0) && (b >>31==1)) | (((a >> 31)^(b >> 31))==0)&&(((a-b)>>31)==0))? b:a;
}
yang8961 2011-08-23
  • 打赏
  • 举报
回复
变态啊!!这种题,不是故意刁难么。。。
dahaiI0 2011-08-23
  • 打赏
  • 举报
回复
留个爪印···
Davenimei 2011-08-23
  • 打赏
  • 举报
回复
哪个面试官出这种题目 真的很有才。。。。
Sniper80KG 2011-08-23
  • 打赏
  • 举报
回复
顶!!!!!!!!!!!!!!!
fupa0 2011-08-23
  • 打赏
  • 举报
回复
很久以前就有讨论过的

http://topic.csdn.net/t/20030731/19/2094930.html
fupa0 2011-08-23
  • 打赏
  • 举报
回复
多年前看过一个求最大值的
int Max( int a, int b )
{
int nResult[3] = { b, b, a };
return nResult[ ( (a - b) * 2 + 1 ) % 2 + 1 ];
}

最小值的类似,把数组里面的a和b换换就行了
shaffee 2011-08-23
  • 打赏
  • 举报
回复
学习中
liaodailiang 2011-08-23
  • 打赏
  • 举报
回复
int min = ((a+b)-abs(a-b))/2;
长安宁 2011-08-23
  • 打赏
  • 举报
回复
利用两数相减后的最高位不行吗?
int min(int x,int y)
{
return ( (x-y)>>(sizeof(int)-1) & x ) | ( (y-x)>>(sizeof(int)-1) & y );
}
hacqing 2011-08-23
  • 打赏
  • 举报
回复

//参考了105楼:

#define sig(x) ((x) >> (sizeof(int) * 8 - 1))

int Min( int a, int b)
{
unsigned int aa = a;
unsigned int bb = b;
int array[3][2] = { {b, b}, {b, a}, {a, a} };
int x = sig(aa) - sig(bb);
int y = (x * x - 1) * ( x * x - 1) * (sig(aa - bb)); //此处,溢出无影响。

return array[x + 1][y];
}

加载更多回复(199)

64,439

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧