这个面试题挺有意思的。 最直接的想法是 相减 。 看那个数大于,小于还是等于0。
不过,相减容易可能溢出。 比如正数减去负数。 只要判断出两个数是正负,是不用相减的。用这个思想 应该行。
C 或 C++ 用, bool 和 整数 可以直接转化。
整数 转化为bool
正整数 | True |
负整数 | True |
零 | False |
bool 转化为整数
True | 1 |
False | 0 |
网上有专门的讨论: http://www.linuxsir.org/bbs/thread271234.html
可是, 很多编程语言 不支持这种转化。 我喜欢C#, 我就思考C#怎么办。 最后,我发现一个通用方法, 可运用所有语言上。只要它支持switch
public static int Compare(int number1, int number2) { int digitNunmberForSymbol = sizeof(int) * 8 - 1; switch ((number1 >> digitNunmberForSymbol) - (number2 >> digitNunmberForSymbol)) { // Means number1, number2 has the same symbol case 0: return number1 - number2; default: // Means number1, number2 has the different symbol switch (number1 >> digitNunmberForSymbol) { case 0: //Means number1 is positive return 1; default: //Means number2 is positive return -1; } } } |