一道看到的面试题 [写一个函数,比较2个整数大小,但不是用任何比较操作符]

这个面试题挺有意思的。 最直接的想法是 相减 。 看那个数大于,小于还是等于0。


不过,相减容易可能溢出。 比如正数减去负数。 只要判断出两个数是正负,是不用相减的。用这个思想 应该行。 

C 或 C++ 用, bool 和 整数 可以直接转化。  

  整数 转化为bool

正整数True
负整数True
False

 bool 转化为整数

True1
False0


网上有专门的讨论: 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;
                    }
            }
        }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值