您的位置:首页 > 职场人生

面试题总结——位的一些东西

2012-04-04 22:56 190 查看
今天看了下《编程之美》,正好看到将帅问题,将答案看完后,感觉,去微软这帮人果然很猛,而且发现,面试题老喜欢搞一些bit级运算的东东,所以就总结一下,以备不时只需。希望也能帮到看的人。

现在大家都喜欢在位上搞点文章,从最简单的移位运算比乘2快,到进阶的bit map法解决大数据量问题;从高层的bitset封装类逐个位图法排序,到底层编程的CPU大小端,感觉面试,能在bit上做文章的东西真的不少。

首先,位运算的一些面试题可以参考http://www.chinazk.com/bbs/dispbbs.asp?BoardID=109&ID=34801,非常详细的说明了各种位运算可能会考到的地方,需要注意的两点:

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这两个数了。

另外可参考:/article/6436343.html 一道用位存储大数的题详解
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: