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

    今天看了下《编程之美》,正好看到将帅问题,将答案看完后,感觉,去微软这帮人果然很猛,而且发现,面试题老喜欢搞一些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这两个数了。


另外可参考:http://www.cnblogs.com/steven_oyj/archive/2010/05/23/1741975.html 一道用位存储大数的题详解

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值