本文共 717 字,大约阅读时间需要 2 分钟。
今天看了下《编程之美》,正好看到将帅问题,将答案看完后,感觉,去微软这帮人果然很猛,而且发现,面试题老喜欢搞一些bit级运算的东东,所以就总结一下,以备不时只需。希望也能帮到看的人。
现在大家都喜欢在位上搞点文章,从最简单的移位运算比乘2快,到进阶的bit map法解决大数据量问题;从高层的bitset封装类逐个位图法排序,到底层编程的CPU大小端,感觉面试,能在bit上做文章的东西真的不少。
首先,位运算的一些面试题可以参考,非常详细的说明了各种位运算可能会考到的地方,需要注意的两点:
1、C语言提供的6个按位运算只能对整型操作数,即只能用在char、short、int和long类型
2、位运算符的优先级低于==和!=,测试时,记得加上()
然后,是编程之美提到的将帅问题(详情可以百度),看了微软提供的三种解法,自己拿到题,首先想到的是直接两层for循环,不过引入了2个int型,不符合题目要求,只有1字节空间,哪怕循环中我用unsigned char控制(为什么是unsigned呢,),也要2字节啊,根据解法一提示,首先想到了bitset,虽然对于bitset的操作会稍微麻烦不少;当然,那书给出的解法一,真个麻烦,就没看了
第三种解法,还是比较传统的编程用法,位字段。
struct {unsigned char a;unsigned char b;} i;第二种解法比较贼,居然用BYTE num= 81来映射,让i=num%9,j=num/9+1,这样所有的位置都映射好了,i=1到9,j=1到9。当然,只能用num的前提下,就使用num%9和num/9+1这两个数了。
另外可参考: 一道用位存储大数的题详解
转载地址:http://cmcqb.baihongyu.com/