13

我有以下代码:

SN.get_Chars(5)

SN是一个字符串,所以这应该给出第 5 个字符。行!

现在我有另一个代码,但是:SN.get_Chars(0x10)

我想知道0x10是什么?是数字吗?如果是这样,那么十进制表示法是什么?

4

5 回答 5

91

0xNNNN(不一定是四位数字)至少在 C 中表示十六进制(base-16,因为 'hex' 是 6 而 'dec' 在拉丁衍生语言中是 10)数字,其中N一个数字是0通过9A通过F(或它们的小写等价物,代表 10 到 15),并且数字中可能有 1 个或多个这些数字。表示它的另一种方式是 NNNN 16

它在计算机世界中非常有用,因为一个十六进制数字代表四位(二进制数字)。那是因为四位,每一个都有两个可能的值,给你一个总数2 x 2 x 2 x 2or 16(2 4 ) 个值。换句话说:

  _____________________________________bits____________________________________
 /                                                                             \
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| bF | bE | bD | bC | bB | bA | b9 | b8 | b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 |
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
 \_________________/ \_________________/ \_________________/ \_________________/ 
      Hex digit           Hex digit           Hex digit           Hex digit

一个以 X 为底的数字是一个数字,其中每个位置代表 X 的幂的倍数。


在我们人类习惯的以 10 为底的情况下,使用的数字是0through 9,数字 7304 10是:

  • (7 x 10 3 ) = 7000 10 ; 加
  • (3 x 10 2 ) = 300 10 ; 加
  • (0 x 10 1 ) = 0 10 ; 加
  • (4 x 10 0 ) = 4 10 ; 等于 7304。

在八进制中,数字0通过7. 数字 754 8是:

  • (7 x 8 2 ) = 448 10 ; 加
  • (5 x 8 1 ) = 40 10 ; 加
  • (4 x 8 0 ) = 4 10 ; 等于 492 10

C 中的八进制数以字符开头,0因此0123不是 123,而是 (1 * 64) + (2 * 8) + 3 或 83。


在二进制中,数字是01。数字 1011 2是:

  • (1 x 2 3 ) = 8 10 ; 加
  • (0 x 2 2 ) = 0 10 ; 加
  • (1 x 2 1 ) = 2 10 ; 加
  • (1 x 2 0 ) = 1 10 ; 等于 11 10

在十六进制中,数字是0直通9A直通F(表示“数字”10直通15)。数字 7F24 16是:

  • (7 x 16 3 ) = 28672 10 ; 加
  • (F x 16 2 ) = 3840 10 ; 加
  • (2 x 16 1 ) = 32 10 ; 加
  • (4 x 16 0 ) = 4 10 ; 等于 32548 10

您相对简单的 number 0x10(即 C 表示 10 16的方式)就是:

  • (1 x 16 1 ) = 16 10 ; 加
  • (0 x 16 0 ) = 0 10 ; 等于 16 10

顺便说一句,不同的数字基数用于许多事情。

  • 如前所述,我们手上有 10 个数字的人使用 base 10。
  • 由于用电路表示两个二进制状态相对容易,因此计算机使用 base 2。
  • base 8 几乎专门用于 UNIX 文件权限,因此每个八进制数字代表二进制权限的 3 元组(读/写/执行)。它还用于基于 C 的语言和 UNIX 实用程序中,以将二进制字符注入到其他可打印的仅字符数据流中。
  • 以 16 为基数是一种将四位表示为一个数字的便捷方式,尤其是在当今大多数体系结构的字长是四位的倍数的情况下。
  • base 64 用于对邮件进行编码,以便可以仅使用可打印字符发送二进制文件。每个数字代表六个二进制数字,因此您可以将三个八位字符打包成四个六位数字(文件大小增加 25%,但保证通过邮件网关不受影响)。
  • 作为一个半有用的片段,基数 60 来自一些非常古老的文明(巴比伦、苏美尔、美索不达米亚或类似的东西),并且是每分钟 60 秒/分钟、360 度圆周、60 分钟的来源(弧)在一定程度上等等[与计算机行业没有真正的关系,但仍然很有趣]。
  • 作为一个更没用的片段,《银河系漫游指南》中的终极问题和答案是“当你将 6 乘以 9 时,你会得到什么?” 和“42”。虽然同样说这是因为地球计算机有故障,但其他人认为这是创造者有 13 个手指的证据 :-)
于 2009-03-28T05:54:06.240 回答
50

0x 表示数字是十六进制,或以 16 为基数。

0x10 是 16。

于 2009-03-28T05:34:29.377 回答
5

简单的版本是 0x 是一个前缀,表示一个十六进制数source

因此,您要计算的值位于前缀之后,在本例中为 10。

但这不是数字 10。最高有效位1表示十六进制值,而0表示单位。

所以你要做的简单数学是

0x10

1 * 16 + 0 = 16

注意 - 您使用 16,因为十六进制是 16。

另一个例子:

0xF7

15 * 16 + 7 = 247

您可以通过搜索十六进制表来获取值列表。例如,在此图表中,通知 F 对应于 15。

于 2017-05-19T22:16:57.753 回答
3

它是一个十六进制数,是十进制的 16。

于 2009-03-28T05:34:54.257 回答
3

请注意,“10”是该基数中基数的表示:

10 在 base-2 中是 2(十进制)

10 在 base-3 中是 3(十进制)

...

10 是以 10 为底的 10(十进制)

...

10 是 base-16(十六进制)中的 16(十进制)

...

10 是 1024(十进制),以 1024 为底

...等等

于 2009-04-21T06:51:49.937 回答