几道笔试题的解法(八)
2010-03-31 23:41
375 查看
题目:请定义一个宏,比较两个数a、b的大小,不能使用大于、小于、if语句。
分析:本题考查的是位操作和问号操作符的知识。
代码如下:
1. #include <limits>
template<typename T>
T Max(const T& a, const T&b)
{
return (a - b) & (numeric_limits<T>::max() + 1 ) ? b : a;
}
2.
template<typename T>
T Max(const T& a, const T&b)
{
return (a - b) & (1 << (sizeof(T) * 8 - 1)) ? b : a;
}
3.#define max(a,b) (((a)-(b))&(1<<31))?(b):(a) //这个显得只针对于int
分析:本题考查的是位操作和问号操作符的知识。
代码如下:
1. #include <limits>
template<typename T>
T Max(const T& a, const T&b)
{
return (a - b) & (numeric_limits<T>::max() + 1 ) ? b : a;
}
2.
template<typename T>
T Max(const T& a, const T&b)
{
return (a - b) & (1 << (sizeof(T) * 8 - 1)) ? b : a;
}
3.#define max(a,b) (((a)-(b))&(1<<31))?(b):(a) //这个显得只针对于int
相关文章推荐