前几天我们一个师哥去面试,遇到了这样的问题,人家给了个脑筋急转弯让他回答。他没回答出来(这是米导说的,注:米导——米导师,把我们都迷倒了, O( ∩ _ ∩ )O~ ),然后米导就把这个问题给了我们。于是有了这篇文章。
问题是: 13 加 4 或者减 4 在什么情况下等于 1. ?
你可以先思考一下。记住,这是给一个挨踢人的转弯题。
首先分析一下人家出这个面试题的目的。
个人感觉,人家出这样的面试题一般要看你的思维是否敏捷,第二呢就是看你的基础知识是否扎实,第三就是看你的知识面是否广或联想能力是否够强。
既然是编程人员,上述的三点都是毋庸置疑需要具备的素质。
然后在拆开来说。
思维敏捷,也就是你的反应要快,这是长期训练才能修炼好的一项能力。但是这项能力的依据也是第二、第三要说的。
基础知识,这是你整体知识或说是能力大厦的根基所在。没有这个根基就算是再高的楼也会轻易被风吹倒。在此基础上可以发展第三项能力。
广阔的知识面:有了一定基础你才能够在此基础之上不断地发挥,让知识蔓延。也在此基础上你才可以有足够的资源供你联想。
当然了还有一点必须要说的就是你的基础知识和你的宽广的知识面必须形成一个完整的知识体系。要达到这一点就必须要不断地总结,比较,和归纳。这样就会慢慢的建立起知识网络,让知识都联系起来。于是这样你就可以从一点想到另外一点,想到另外的一片知识网络。这个可以参见米导的一篇博客很经典: 《该归仓了 ---- 总结的传说》
额,貌似有人不满了。是不是想迫不及待看到答案。看了我说的这么多的“废话”也不知道你有答案了没有。下面公布一下由我们班里想的一个参考和米导给的一个参考:
先回顾一下问题:问题是: 13 加 4 或者减 4 在什么情况下等于 1. ?
第一个参考(由卓同学提出):在二进制只取四位的情况下 13 加 4 可以等于 1 。
解说: 13 加 4 等于 17 ,换成二进制也就是 10001 。如果只取四位的话那就是说第一个 1 (从左至右)就算是溢出了。于是结果就是 1 。(很佩服这个同学呀,不愧为物电学院出身,对这个很了解。)
第二个参考(由米导提出):在计算机的世界里,只有 0 和 1 ,因此无论你什么数相加减不是 1 就是 0 ,而再由平常的 bool 型判断可知,只要你不是 0 ( FALSE ),那么就是 1 ( TRUE )。因此无论什么数相加减,只要不是 0 他就是 1 。(个人感觉这个答案很强悍,直接看到本质)
不知道看官还有什么别的答案,欢迎提出,欢迎指教。