注册 登录
查看: 4024|回复: 263

【每日一思】用宏定义实现比较两个数的大小

  [复制链接]
发表于 2013-12-18 00:23:27 | 显示全部楼层 |阅读模式
这题也是出自 腾讯的 软件笔试题目
  1. 请定义一个宏定义,比较a,b两个变量的 大小,不能使用 大于、小于、if语句
大家认真去思考,直接看答案是 学不到东西的,认真回答一下问题 这些题目都是 找工作时面试笔试常考的问题,当然,往往是叫你自己写出源代码。

答案依旧回复可见。

游客,如果您要查看本帖隐藏内容请回复

本帖被以下淘专辑推荐:

回复

使用道具 举报

发表于 2013-12-18 09:06:44 | 显示全部楼层
  #define Max((x),(y))  ((x)>=(y)?(x)y))
回复 支持 反对

使用道具 举报

发表于 2013-12-18 09:08:35 | 显示全部楼层
强烈支持,非常感谢哥们
回复 支持 反对

使用道具 举报

发表于 2013-12-18 09:14:24 | 显示全部楼层
使用三目运算符。
#define max(a,b)  (abs((a)-(b))==((a)-(b)) ? (a) : (b))//减下来的绝对值等于本身减的数,成立就返a啊,否则返回b。
回复 支持 反对

使用道具 举报

发表于 2013-12-18 10:07:06 | 显示全部楼层
LIEYING 发表于 2013-12-18 09:06
  #define Max((x),(y))  ((x)>=(y)?(x)y))

这里用了 大于号
回复 支持 反对

使用道具 举报

发表于 2013-12-18 10:09:24 | 显示全部楼层
♂荻夜 发表于 2013-12-18 09:14
使用三目运算符。
#define max(a,b)  (abs((a)-(b))==((a)-(b)) ? (a) : (b))//减下来的绝对值等于本身减的 ...

这类的题目一般都不给调用函数的,你这用法调用函数 abs

不过其实 也 差不多 正确的
回复 支持 反对

使用道具 举报

发表于 2013-12-18 10:21:53 | 显示全部楼层
Admin 发表于 2013-12-18 10:09
这类的题目一般都不给调用函数的,你这用法调用函数 abs

不过其实 也 差不多 正确的

恩 学习一下山外哥的方法
回复 支持 反对

使用道具 举报

发表于 2013-12-18 12:53:59 | 显示全部楼层
#define (a,b) a-b ? a,b
回复 支持 反对

使用道具 举报

发表于 2013-12-18 12:56:00 | 显示全部楼层
Waiting 发表于 2013-12-18 12:53
#define (a,b) a-b ? a,b

后面逗号改成冒号。打太快了。
回复 支持 反对

使用道具 举报

发表于 2013-12-18 13:02:30 | 显示全部楼层
抢沙发~给哥们顶一个
回复 支持 反对

使用道具 举报

发表于 2013-12-18 19:34:06 | 显示全部楼层
走过路过,不能错过
回复 支持 反对

使用道具 举报

发表于 2013-12-18 21:55:06 | 显示全部楼层
想到的都要用大于小于号。。。
回复 支持 反对

使用道具 举报

发表于 2013-12-18 22:44:49 | 显示全部楼层
看看不用小于号怎么写?
回复 支持 反对

使用道具 举报

发表于 2013-12-18 23:02:56 | 显示全部楼层
走过路过,不能错过走过路过,不能错过走过路过,不能错过
回复 支持 反对

使用道具 举报

发表于 2013-12-18 23:15:03 | 显示全部楼层
- - 为什么要用long转换。。。是因为不同机子int可能会不一样长吗。。
回复 支持 反对

使用道具 举报

发表于 2013-12-19 13:51:29 | 显示全部楼层
#define  FINE_MAX(a,b)   return(a/b)  
回复 支持 反对

使用道具 举报

发表于 2013-12-19 16:38:36 | 显示全部楼层
没有学过,我直接看看答案学习吧
回复 支持 反对

使用道具 举报

发表于 2013-12-20 16:33:30 | 显示全部楼层
没有学过,我直接看看答案学习吧
回复 支持 反对

使用道具 举报

发表于 2013-12-20 17:58:34 | 显示全部楼层
强烈支持,非常感谢哥们笑坏我的肚子了走过路过,不能错过
回复 支持 反对

使用道具 举报

发表于 2013-12-20 21:15:20 | 显示全部楼层
来学习一下
回复 支持 反对

使用道具 举报

发表于 2013-12-20 21:16:53 | 显示全部楼层
这个真心不知道来着!
回复 支持 反对

使用道具 举报

发表于 2013-12-21 12:04:43 | 显示全部楼层
学习!!!!!!!!!!!
回复 支持 反对

使用道具 举报

发表于 2013-12-21 13:40:38 | 显示全部楼层
呵呵!不知道
回复 支持 反对

使用道具 举报

发表于 2013-12-21 13:49:23 | 显示全部楼层
有点难 没头绪
回复 支持 反对

使用道具 举报

发表于 2013-12-21 14:23:23 | 显示全部楼层
不能用大鱼小鱼号 ,表示也不会!
回复 支持 反对

使用道具 举报

发表于 2013-12-22 14:36:02 | 显示全部楼层
#define Max(a,b)  (((a-b)&0x8000)?b:a)
回复 支持 反对

使用道具 举报

发表于 2013-12-22 14:38:50 | 显示全部楼层
H.M.S 发表于 2013-12-22 14:36
#define Max(a,b)  (((a-b)&0x8000)?b:a)

看了答案和我的差不多,哈哈。相减后是负数的话,最高位是1
回复 支持 反对

使用道具 举报

发表于 2013-12-22 14:41:55 | 显示全部楼层
强烈支持,非常感谢哥们
回复 支持 反对

使用道具 举报

发表于 2013-12-23 11:14:09 | 显示全部楼层
想看看这里面的宝贝
回复 支持 反对

使用道具 举报

发表于 2013-12-24 15:02:19 | 显示全部楼层
不懂,回复看答案!
回复 支持 反对

使用道具 举报

发表于 2013-12-24 22:58:23 | 显示全部楼层
#define cmp(a, b) (( fabs( (a-b)-fabs(a-b) ) ))?0:1
回复 支持 反对

使用道具 举报

发表于 2013-12-25 16:24:36 | 显示全部楼层
#define MAX(x,y) (((x)>(y))?(x)y))
回复 支持 反对

使用道具 举报

发表于 2013-12-26 12:20:29 | 显示全部楼层
强烈支持,非常感谢哥们强烈支持,非常感谢哥们强烈支持,非常感谢哥们强烈支持,非常感谢哥们
回复 支持 反对

使用道具 举报

发表于 2013-12-26 17:33:25 | 显示全部楼层
话说 a,b的类型是给定的吗
回复 支持 反对

使用道具 举报

发表于 2013-12-26 17:36:07 | 显示全部楼层
似水流年、 发表于 2013-12-26 17:33
话说 a,b的类型是给定的吗

和刚想的差不多,整形的话,先进行类型强制转换再相减;但如果是浮点数该如何解决呢?也转换成 long int?
回复 支持 反对

使用道具 举报

发表于 2013-12-27 21:57:47 | 显示全部楼层
不知道答案 求解
回复 支持 反对

使用道具 举报

发表于 2013-12-27 21:58:17 | 显示全部楼层
不知道答案 求解
回复 支持 反对

使用道具 举报

发表于 2013-12-27 22:02:00 | 显示全部楼层
#define max(a,b) a>b?1:0
回复 支持 反对

使用道具 举报

发表于 2013-12-29 20:04:02 | 显示全部楼层
学习下   谢谢大神们              
回复 支持 反对

使用道具 举报

发表于 2013-12-31 09:45:49 | 显示全部楼层
  1. #defina max(a,b) (if(a>b)a?b)
回复 支持 反对

使用道具 举报

发表于 2013-12-31 23:08:50 | 显示全部楼层
走过路过,不能错过
回复 支持 反对

使用道具 举报

发表于 2014-1-2 12:03:58 | 显示全部楼层
#define max(a,b) ((a-b)? a,b)
回复 支持 反对

使用道具 举报

发表于 2014-1-2 12:05:05 | 显示全部楼层
#define max(a,b) ((a-b)? a,b)
回复 支持 反对

使用道具 举报

发表于 2014-1-2 17:34:42 | 显示全部楼层
想不出来,直接看答案吧。
回复 支持 反对

使用道具 举报

发表于 2014-1-4 10:42:09 | 显示全部楼层
学习一下
回复 支持 反对

使用道具 举报

发表于 2014-1-4 10:45:03 | 显示全部楼层
学习一下
回复 支持 反对

使用道具 举报

发表于 2014-1-4 10:55:50 | 显示全部楼层
为何不写成这样的#define MAX(a,b) ((a)>(b)?(a)b))?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-1-4 11:01:59 | 显示全部楼层
雪域1号 发表于 2014-1-4 10:55
为何不写成这样的#define MAX(a,b) ((a)>(b)?(a)b))?

题目规定 不能 用 大于 小于 if

这类题目,其实 是 拓展思维的
回复 支持 反对

使用道具 举报

发表于 2014-1-4 11:52:52 | 显示全部楼层
山外メ雲ジ 发表于 2014-1-4 11:01
题目规定 不能 用 大于 小于 if

这类题目,其实 是 拓展思维的

那判断正负号时,我没想通为何与0x80000000进行与运算,long int是32位吗?long int强行转换后符号位会到最高位嘛?
回复 支持 反对

使用道具 举报

发表于 2014-1-4 11:55:19 | 显示全部楼层
雪域1号 发表于 2014-1-4 11:52
那判断正负号时,我没想通为何与0x80000000进行与运算,long int是32位吗?long int强行转换后符号位会到 ...

long int 是 32位 的
short int 是 16位的

你研究 一下 补码 ,就知道 为什么是 最高位 符号位
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回列表 返回顶部