A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 一碗小米周 中级黑马   /  2013-10-6 20:31  /  4696 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 一碗小米周 于 2013-10-7 10:48 编辑

.int a = 1234567;
int b = 0x06;
int result = a&b;
请问各位这题的简便解答方式是什么?将a化成二进制后再与太麻烦了啊?求大神帮忙看看

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

10 个回复

倒序浏览
&就是一个二进制运算符…… 你不转成二进制如何进行运算?
回复 使用道具 举报
毋须繁华 发表于 2013-10-6 22:37
&就是一个二进制运算符…… 你不转成二进制如何进行运算?

恩。难道要把1234567化成二进制再运算嘛?那个是腾讯的面试题。。我发现,1234567的二进制最后四位是和7正好是一样的。不知道有没有什么规律。
回复 使用道具 举报
落木萧萧 来自手机 高级黑马 2013-10-7 00:39:58
板凳
本帖最后由 落木萧萧 于 2013-10-7 00:57 编辑

腾讯的面试题果然花了些心思。0x06的二进制是110,按位与的计算规则是两位都为1才为1。那么只要计算1234567转换成二进制最后三位与110的按位与结果就好了。
十进制转二进制是倒除法,即用十进制的整数部分除以2的余数和最后的1从下往上写。题目中末位为7,除以2,商3,余1,那最后位是1。3再除以2,商1,余1,倒数第二位也是1。刚才商的1不管前面是什么肯定还会余1。所以1234567转换成二进制的后三位是111。结果很明显了吧^_^

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
0x06是 00....110,一个数跟它与运算之后得到的就是:这个数的二进制表现形式的后3位,并且最低位换成0
回复 使用道具 举报
落木萧萧 发表于 2013-10-7 00:39
腾讯的面试题果然花了些心思。0x06的二进制是110,按位与的计算规则是两位都为1才为1。那么只要计算1234567 ...

额,说实话,我并没有懂您的意思。那按您的意思是,123456的二进制的最后四位和6的二进制位相同了?
回复 使用道具 举报
The_Wizard 发表于 2013-10-7 10:01
0x06是 00....110,一个数跟它与运算之后得到的就是:这个数的二进制表现形式的后3位,并且最低位换成0 ...

什么意思?理解力比较差。。
回复 使用道具 举报
本帖最后由 落木萧萧 于 2013-10-7 10:40 编辑
一碗小米周 发表于 2013-10-7 10:02
额,说实话,我并没有懂您的意思。那按您的意思是,123456的二进制的最后四位和6的二进制位相同了?
...


这道题考了两个知识点:一个是按位与计算,一个是十进制与二进制的转换。
首先,按为与就是1&0 = 0,0&1 = 0,0&0=0,1&1=1.就是全部为1时才为1。
1234567&0x06就是
    100101101011010000111
&  000000000000000000110
--------------------------------------
    000000000000000000110

从上面的式子可以看出只要计算出1234567转成2进制的最后三位就可以计算出结果。

回复 使用道具 举报
xh396660787 发表于 2013-10-7 10:28
我开始也以为可以这样算,但是后来试验来一下,发现不行啊。二进制转十进制中二进制每一位数字(0/1)都有 ...

惭愧,惭愧。

回复 使用道具 举报
额。。我终于理解这题了。这题没有必要把真个1234567的二进制都算出来。因为根据0x06可以知道只要知道1234567的最后三个二进制位即可。而1234567的最后三个二进制位,也就是1234567进行除二运算的前三个余数,因为是倒叙的,这个运算也不是很麻烦的。我一开始以为要把1234567的整个二进制位都要运算出来。。。谢谢以上各位。
回复 使用道具 举报
一碗小米周 发表于 2013-10-7 10:48
额。。我终于理解这题了。这题没有必要把真个1234567的二进制都算出来。因为根据0x06可以知道只要知道12345 ...

原来如此…… 我想的太简单了……
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马