位和字节以及它们是什么形式
bits and bytes and what form are them
虽然我一直在网上搜索,但我仍然对比特和字节感到困惑。那是不是ASCII的一个字符=1个字节=8位?那么8位有256个独特的模式覆盖了所有的ASCII码,它在我们的电脑中是以什么形式存储的呢?
如果我输入 "Hello" 是否意味着它包含 5 个字节?
对你写的一切都是肯定的。 "Bit" 是二进制数字:0 或 1。历史上存在更小的字节;现在 "byte" 仅表示“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 也称其为 "byte",它不一定是 8 位。在所有其他上下文中,人们说 "byte" 时的意思是 8 位。如果他们想要非常明确,他们可能会说 "octet".)
"Hello" 是五个字符。在特定的字符集中,它是五个代码点。在该字符集的特定编码中,它可以是 5、10 或 20,或者 ???字节。
此外,在特定语言的源代码中,像这样的文字字符串可能是 "null-terminated"。这意味着您可以说它是 6 "characters"。其他语言可能将字符串存储为代码单元的计数序列。同样,您必须查看语言参考以了解字符串的底层数据结构。当然,如果使用的语言和库足够高级,您可能永远不需要了解这些内部结构。
虽然我一直在网上搜索,但我仍然对比特和字节感到困惑。那是不是ASCII的一个字符=1个字节=8位?那么8位有256个独特的模式覆盖了所有的ASCII码,它在我们的电脑中是以什么形式存储的呢?
如果我输入 "Hello" 是否意味着它包含 5 个字节?
对你写的一切都是肯定的。 "Bit" 是二进制数字:0 或 1。历史上存在更小的字节;现在 "byte" 仅表示“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 也称其为 "byte",它不一定是 8 位。在所有其他上下文中,人们说 "byte" 时的意思是 8 位。如果他们想要非常明确,他们可能会说 "octet".)
"Hello" 是五个字符。在特定的字符集中,它是五个代码点。在该字符集的特定编码中,它可以是 5、10 或 20,或者 ???字节。
此外,在特定语言的源代码中,像这样的文字字符串可能是 "null-terminated"。这意味着您可以说它是 6 "characters"。其他语言可能将字符串存储为代码单元的计数序列。同样,您必须查看语言参考以了解字符串的底层数据结构。当然,如果使用的语言和库足够高级,您可能永远不需要了解这些内部结构。