【问题标题】:Binary , hexadecimal and octal values in mysqlmysql中的二进制、十六进制和八进制值
【发布时间】:2012-05-24 10:39:58
【问题描述】:

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

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

这里还有像“这样的位操作符

这里是示例 => SELECT 50<<2 AS example;

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

感谢您的回答:))

【问题讨论】:

标签: mysql hex bin octal


【解决方案1】:

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

<<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)

【讨论】:

  • 所以如果尽管是 2 它将是例如 4 它会将位向左移动 4 个位置?
  • 正确。试试看,你可以自己看看。
【解决方案2】:

首先请给我一个建议,为什么我们在存储信息时需要它们

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

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

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

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

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

谁能解释它是如何计算的?

&lt;&lt; operator 执行按位左移。也就是说,它将左侧操作数的位向左移动右侧操作数给出的位数。

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

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

【讨论】:

  • 对于我们的示例,我还阅读了类似的解释 => 位运算符处理值的二进制表示。值 50 的二进制表示是 110010。使用运算符
  • @Tomike:阅读了您的评论收获,我现在明白您在问什么。答案很简单,左移操作就是这样定义的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-12
  • 2014-03-11
  • 2022-09-29
  • 2021-06-08
  • 2015-09-06
  • 1970-01-01
相关资源
最近更新 更多