【发布时间】:2016-05-11 02:08:40
【问题描述】:
尽管我一直在互联网上搜索,但我仍然对位和字节感到困惑。那是ASCII的一个字符= 1字节= 8位吗?那么 8 位有 256 个独特的模式,覆盖了所有的 ASCII 码,它在我们的计算机中存储的形式是什么?
如果我输入“Hello”,这是否意味着这包含 5 个字节?
【问题讨论】:
尽管我一直在互联网上搜索,但我仍然对位和字节感到困惑。那是ASCII的一个字符= 1字节= 8位吗?那么 8 位有 256 个独特的模式,覆盖了所有的 ASCII 码,它在我们的计算机中存储的形式是什么?
如果我输入“Hello”,这是否意味着这包含 5 个字节?
【问题讨论】:
是的,你写的一切。 “位”是二进制数字:0 或 1。历史上存在较小尺寸的字节;现在“字节”只意味着“8 位信息”,或 0 到 255 之间的数字。
【讨论】:
没有。 ASCII 是一个包含 128 个代码点的字符集,存储为值 0-127。现代计算机主要寻址 8 位内存和磁盘位置,因此 7 位 ASCII 值占用 8 位。
没有文本,只有编码文本。编码将字符集的成员映射到一个或多个字节。除非您绝对知道您使用的是 ASCII,否则您可能不会。有不少字符集的编码涵盖所有 256 字节值,并使用字节值的任意组合对字符串进行编码。 有几个字符集相似但少于 256 个字符。以及其他使用多个字节来编码代码点并且不使用字节值的所有组合的其他方法。
您知道,Unicode 是主要的字符集,除非在非常特殊的情况下。它有几种编码。 UTF-8 通常用于存储和流。 UTF-16 经常在内存中使用,特别是在 Java、.NET、JavaScript、XML 等中。当文本在系统之间进行通信时,必须有关于它使用哪种字符集和编码的协议、规范、标准或指示,以便可以将字节序列解释为字符。
更令人困惑的是,编程语言具有称为char、Character 等的数据类型。您必须查看特定语言的参考手册才能了解它们的含义。例如,在 C 中,char 只是一个整数,它被定义为该 C 实现使用的字符编码的大小。 (C 也将此称为“字节”,它不一定是 8 位。在所有其他上下文中,人们说“字节”时的意思是 8 位。如果他们想要非常明确,他们可能会说“八位字节”。)
“你好”是五个字符。在特定的字符集中,它是五个代码点。在该字符集的特定编码中,它可以是 5、10 或 20,或者 ???字节。
此外,在特定语言的源代码中,这样的文字字符串可能是“以空值结尾的”。这意味着您可以说它是 6 个“字符”。其他语言可能会将字符串存储为经过计数的代码单元序列。同样,您必须查看语言参考才能了解字符串的底层数据结构。当然,如果使用的语言和库足够高级,您可能永远不需要了解这些内部结构。
【讨论】: