mysql中的二进制,十六进制和八进制值

时间:2012-05-16 19:59:21

标签: mysql hex bin octal

我对在mysql数据库中使用二进制,十六进制和八进制系统非常感兴趣。首先,请告诉我为什么在存储信息时我们需要它们,因为大量信息或为什么?

还必须在标记的系统中存储哪种类型的值?

此外,这里的位操作符如“<<”

这里是example =&gt; SELECT 50<<2 AS example;

这给我们结果200,任何人都可以解释它是如何计算的?

感谢您的回答:))

2 个答案:

答案 0 :(得分:4)

  

首先,请在存储信息时告诉我为什么需要它们

计算机以二进制形式存储数据。有时我们根据存储的实际进行思考是有用的,在这种情况下,我们熟悉的十进制系统可能有点尴尬(因为转换不是直截了当的);我们可以完整地写出这些位,但这通常太麻烦,因为即使很小的数字占用了大量的空间来写(例如十进制24521是二进制101111111001001)。

相反,我们倾向于使用2的幂的基数,因为它们比二进制更紧凑,同时具有每个'数字'表示二进制表示中的精确位数的属性。例如,十六进制(base-16)数字表示四位(“半字节”),其中数字为0F(十进制15 /二进制1111) ;八进制(base-8)数字表示三位,其中数字为07(二进制111)。

我们之前的十进制24521示例将是十六进制5FC9或八进制57711:从右边开始,您可以看到每个数字分别代表上面的4和3位二进制表示。因此,我们人类(相对)容易看到二进制表示,同时在其他基础上查看这些紧凑的表示。

  

还必须在标记的系统中存储哪种类型的值?

我不确定你的意思。如上所述,可以在所有这些系统中表示相同的值。在MySQL中,我们可以通过在0b前加上一个二进制文字,并在前面添加0x来表示一个十六进制文字。 MySQL不支持八进制文字。

  

任何人都可以解释它是如何计算的?

<< operator执行按位左移。也就是说,它将左侧操作数的位移位右侧操作数给出的位数。

对于每个位置,整数的向左移位,这些位表示的值增加两倍。它类似于在我们的十进制系统中移动数字的效果,其中值增加十倍(例如,50向左移动一个位置给出500,这是十倍增加;在二进制110(十进制6)向左移动一个位置给出1100(十进制12),这是两倍的增加。)

在你的情况下,将数字50的位(即110010两个位置向左移动会产生2倍的增加(即整体增加4倍): 11001000是十进制200。

答案 1 :(得分:2)

你的前两个问题太模糊了,无法回答,但第三个问题具体到足以让我回答。

<<2正在将位移到左侧2位,如文档here所述。这相当于将50乘以2 ^ 2:

mysql> SELECT 50<<2 AS example;
+---------+
| example |
+---------+
|     200 |
+---------+
1 row in set (0.00 sec)

mysql> 
mysql> SELECT 50 * POW(2,2) AS example;
+---------+
| example |
+---------+
|     200 |
+---------+
1 row in set (0.00 sec)