我对在 mysql 数据库中使用二进制、十六进制和八进制系统非常感兴趣。首先,请给我一个建议,为什么我们在存储信息期间需要它们,因为大量信息或为什么?
此外,哪种类型的值必须存储在标记的系统中?
此外这里还有像“<<”这样的位运算符
这是示例=>SELECT 50<<2 AS example;
这给了我们200个结果,任何人都可以解释它是如何计算的吗?
谢谢回答 :))
首先,请给我一个建议,为什么我们在存储信息时需要它们
计算机以二进制形式存储数据。有时考虑存储的实际位对我们很有用,在这种情况下,我们熟悉的十进制系统可能有点尴尬(因为转换并不简单);我们可以完整地写出这些位,但这通常太麻烦了,因为即使是非常小的数字也会占用大量空间来写入(例如十进制24521
是二进制101111111001001
)。
相反,我们倾向于使用 2 的幂的基数,因为它们比二进制更紧凑,同时具有每个“数字”代表二进制表示中精确位数的属性。例如,一个十六进制(base-16)数字表示四个位(一个“半字节”),其中的数字0
一直到F
(十进制15
/二进制1111
);一个八进制(base-8)数字代表三位,数字0
一直到7
(二进制111
)。
我们之前的十进制示例24521
是5FC9
十六进制或57711
八进制:从右边开始,您可以看到每个数字分别代表上述二进制表示中的 4 位和 3 位。因此,我们人类在查看其他基础中的这些紧凑表示时,(相对)容易将二进制表示可视化。
此外,哪种类型的值必须存储在标记的系统中?
我不确定你的意思。如上所述,相同的值可以在所有这些系统中表示。在 MySQL 中,我们可以通过在它前面加上一个二进制字面量0b
和一个十六进制字面量在它前面加上0x
. MySQL 不支持八进制文字。
任何人都可以解释它是如何计算的吗?
<<
运算符执行按位左移。也就是说,它将左侧操作数的位向左移动右侧操作数给出的位数。
对于每个位置,整数的位左移,这些位表示的值增加两倍。这类似于在我们的十进制系统中将数字左移的效果,即值增加十倍(例如,50 向左移动一位得到 500,这是增加十倍;在二进制110
(十进制 6)中移动一位左边的地方给出1100
(十进制12),这是一个两倍的增加)。
在您的情况下,将数字 50 的位(即110010
)向左移动两个位置会产生 2 两倍的增加(即整体增加四倍):11001000
是十进制的 200。
您的前两个问题太模糊无法回答,但第三个问题足够具体,我会回答。
正在将这些<<2
位向左移动 2 位,如此处所述。这相当于将 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)