TOC

一个位运算的小问题

在开源中国中看到一个问题,说的是 MySQL 中做位计算:

select 00101 & 00001 as val1, 00100101 & 000100001 as val2;

为什么 val1 = 1, val2 = 99841?

见于:https://www.oschina.net/question/1273063_139555

没思考过这个问题,在 Python 中试着算一下结果一样,刚开始我也一愣,随即回想一下逻辑运算就明白了。

-> % python
Python 2.7.8 (default, Jun 18 2015, 18:54:19)
[GCC 4.9.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 00101 & 00001
1
>>> 00100101 & 000100001
32769
>>>

按位运算。

(八进制)00101 = 0100 0001
(八进制)00001 = 0000 0001
----------------------------------------------------------
                 0000 0001(二进制) ---> 1(十进制)

(十六进制)100,101 = 1 1000 0111 0000 0101
(十六进制)100,001 = 1 1000 0110 1010 0001
------------------------------------------------------------------------------------------
                     1 1000 0110 0000 0001(二进制) ---> 99,841(十进制)