黑马程序员技术交流社区

标题: 求帮忙看看 [打印本页]

作者: 一碗小米周    时间: 2013-10-6 20:31
标题: 求帮忙看看
本帖最后由 一碗小米周 于 2013-10-7 10:48 编辑

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

作者: 毋须繁华    时间: 2013-10-6 22:37
&就是一个二进制运算符…… 你不转成二进制如何进行运算?
作者: 一碗小米周    时间: 2013-10-6 23:27
毋须繁华 发表于 2013-10-6 22:37
&就是一个二进制运算符…… 你不转成二进制如何进行运算?

恩。难道要把1234567化成二进制再运算嘛?那个是腾讯的面试题。。我发现,1234567的二进制最后四位是和7正好是一样的。不知道有没有什么规律。

作者: 落木萧萧    时间: 2013-10-7 00:39
本帖最后由 落木萧萧 于 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。结果很明显了吧^_^
作者: The_Wizard    时间: 2013-10-7 10:01
0x06是 00....110,一个数跟它与运算之后得到的就是:这个数的二进制表现形式的后3位,并且最低位换成0
作者: 一碗小米周    时间: 2013-10-7 10:02
落木萧萧 发表于 2013-10-7 00:39
腾讯的面试题果然花了些心思。0x06的二进制是110,按位与的计算规则是两位都为1才为1。那么只要计算1234567 ...

额,说实话,我并没有懂您的意思。那按您的意思是,123456的二进制的最后四位和6的二进制位相同了?

作者: 一碗小米周    时间: 2013-10-7 10:06
The_Wizard 发表于 2013-10-7 10:01
0x06是 00....110,一个数跟它与运算之后得到的就是:这个数的二进制表现形式的后3位,并且最低位换成0 ...

什么意思?理解力比较差。。
作者: 落木萧萧    时间: 2013-10-7 10:35
本帖最后由 落木萧萧 于 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进制的最后三位就可以计算出结果。


作者: 落木萧萧    时间: 2013-10-7 10:40
xh396660787 发表于 2013-10-7 10:28
我开始也以为可以这样算,但是后来试验来一下,发现不行啊。二进制转十进制中二进制每一位数字(0/1)都有 ...

惭愧,惭愧。


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

原来如此…… 我想的太简单了……




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2