计算机如何区分二进制中的字母和数字?

Posted

技术标签:

【中文标题】计算机如何区分二进制中的字母和数字?【英文标题】:How do computers differentiate between letters and numbers in binary? 【发布时间】:2017-12-19 14:40:30 【问题描述】:

我只是好奇,因为 65 与字母 A 相同

如果这是错误的堆栈抱歉。

【问题讨论】:

可能更适合cs.stackexchange.com 【参考方案1】:

“65与字母A相同”:你说是真的。但不多说也没多大用处。

没有文本,只有编码文本。没有数字,只有编码的数字。对于 CPU,一些数字编码是本机的,其他一切都只是未区分的数据。

(有些数据只是程序的数据,有些数据是程序的CPU指令。如果CPU不恰当地将数据作为指令执行,就会出现安全问题。有些架构将程序数据和指令分开。)

常见的本机数字编码是 1、2、4 和 8 字节的有符号和无符号整数以及 IEEE-754 单精度和双精度浮点数。有符号整数通常是二进制补码。多字节整数具有字节顺序(或字节序),因为在典型机器上,每个字节都是可单独寻址的。如果数字编码不是原生的,则需要程序库来处理此类数据。

文本是来自字符集的编码字符序列。有数百个字符集。字符集是将概念字符分配给称为代码点的数字。有时,概念字符是categorized 为小写字母、数字、符号等。代码点值使用字符编码映射到字节。大多数字符集都有一种编码,但Unicode 有几种。一些字符集是其他字符集的子集——这种关系通常没有用,因为在任何一种上下文中都使用了一个字符集。

程序是一组对数据进行操作的指令。它必须对正确的数据应用正确的操作。因此,区分文本和数字的是程序,通常通过其位置或流路径来区分。

存储的数据必须采用已知的编码文本和数字布局。有时还会存储布局。布局称为元数据。 如果没有伴随数据的元数据,或者没有达成一致,数据就不能被使用。

只要有适当的簿记,这一切都非常简单。但是有几种记账方法,因此没有通用的解决方案来处理没有元数据的数据。方法包括:众所周知和/或注册的文件扩展名、HTTP 标头、MIME 类型、html 元字符集标记、XML 编码声明。某些方法仅在特定上下文中有效,例如具有四字符代码 (FourCC) 的音频/视频编解码器,以及具有 shebang 的 unix shell 脚本。有些方法只能帮助缩小猜测范围,例如文件签名。不用说,应该避免猜测;这会导致安全问题和数据丢失。

不幸的是,文本文件通常没有元数据。就元数据达成一致或单独传达元数据尤为重要。

没有元数据的数据是“二进制”的。因此,文本的作者必须与读者就使用哪种字符编码达成一致。同样,对于所有类型的数据。这里的 reader 和 writer 既是人类又是程序。

【讨论】:

【参考方案2】:

简短的回答。他们没有。更长的答案,00000000 和 11111111 之间的每个二进制组合在 ASCII 字符集中都有一个字符表示。 01000001 恰好是 30 多年前指定的拉丁字母表中的第一个大写字母。还有其他字符集和代码页代表不同的字母、数字、不可打印和重音字母。二进制 01000001 完全有可能是一个小写 z,在不同的字符集中顶部有一个波浪号。 “计算机”不知道(或关心)特定的二进制表示对人类意味着什么。

【讨论】:

以上是关于计算机如何区分二进制中的字母和数字?的主要内容,如果未能解决你的问题,请参考以下文章

计算机中的信息如何表示

第二章:数据类型和运算符

如何计算熊猫数据框中的非字母数字字符

C语言中16进制的表示方法

c#如何把输入的字符(汉字和英文和数字)输出为对应的二进制

华为机试题-计算字符出现次数