
当众生踏上这条路,眼前是一片迷雾,只因为Bug太多,各种奇技淫巧小W早已见怪不怪,这里就给大家分享下。
判断一个数n是否是2的幂(n为正整数)
最朴素的想法就是不断取余和除2,看看能不能到1:
高级一点的,编程之美上提到过一种位运算的解决办法:
奇技淫巧:
什么?这样也可以?不管你信不信,回去试试就信了(至于为什么可以在搜狗测试公众号里和小W讨论或者等下周同一时间小W来揭晓)。
经典面试题不开空间交换两个整数的值
这里就不一一贴代码,最简单就是加法,不过有溢出的风险现在去面试的孩子基本都都不用了。
然后就是曾经很经典现在已经烂大街的异或用法,这个大家应该也很熟悉,这时可能有人会有疑问难道这个还有什么别的巧法?
抱歉这里小W智商不够见识面也还不够广真心不知道,那要说什么呢?这里要讲的是一位童鞋的写法:
看到这小W也是醉了,泥煤你还真能节约纸张啊。不过不建议各位童鞋采用这种写法,否则被老大直接从窗户扔出去本人概不负责,不好懂不说还不符合标准c++的规范(同一变量在一个语句中被改变了两次)。
等等到这还不算完,有童鞋就告诉我他有更简单好懂的方法,而且用加法就可以,纳尼小W又要涨见识了,下面就看看这位童鞋的大作:
这。。。我就不多说什么呢,但愿你不会被老大从窗户扔出去。不知道这位童鞋用的什么编译器,反正正常环境下是不可能起到交换作用的,可能是比较高端的人脑编译吧。
好了,为了避免大家地铁做过了站或者影响了睡眠时间,这里就不多说了,留给大家一个思考题吧:
在标准编译环境下
int b = 5;
(++b) + (++b) + (++b)
的结果是多少?
不要急着回答我,回去在VS上试试(友情提醒,学过数据结构的可以回忆下当时的那个运算符优先级的实验)。
欲知后事如何,请关注搜狗测试公众号,下次再给大家分享~