对于每个整数,它映射到啥字符?
Posted
技术标签:
【中文标题】对于每个整数,它映射到啥字符?【英文标题】:For each integer what character does it map to?对于每个整数,它映射到什么字符? 【发布时间】:2014-12-27 22:51:22 【问题描述】:考虑 C 中的signed char
:
-128 represents what character?
-127 represents what character?
...
-1 represents what character?
0 represents the NULL character, right?
1 represents the SOH character, right?
...
127 represents the DEL character, right?
接下来,考虑 C 中的unsigned char
:
0 represents the NULL character, right?
1 represents the SOH character, right?
...
127 represents the DEL character, right?
128 represents what character?
129 represents what character?
...
255 represents what character?
signed char
中0到127所代表的字符序列是否与0 到 127 在unsigned char
?
signed char
中-128到-1表示的字符序列是不是同一个序列unsigned char
中由 128 到 255 表示的字符数?
signed char
可以代表 256 个不同的字符,对吧?
unsigned char
可以代表 256 个不同的字符,对吧?
谢谢!
【问题讨论】:
只要编译器以二进制补码表示法使用 8 位char
值,您建议的范围就是正确的。周围可能仍然有一个人的补码或符号幅度系统,但您相对不太可能找到它们。例如,有些系统具有 36 位字,其中字符为 9 位。一些 DSP 系统使用 16 位字符类型。在这两种情况下,您的假设都偏离了方向,但它们非常专业。关于字符的映射,C标准唯一固定的是NUL'\0'
,即字符码0;所有其他的都是实现定义的。
@Jonathan Leffler 不错! - 次要澄清:NUL
是 C“空字符”'\0'
的 ASCII 名称,而不是 C 规范名称。
@chux: 是的,你说得对 — §7.1.1 术语定义(用于库的介绍),标准使用“空字符”,NUL 是 ASCII 中的标准缩写对于零字节。 §6.4.5 字符串文字说“在翻译阶段 7,一个字节或值为零的代码被附加到由一个或多个字符串文字产生的每个多字节字符序列。78)”和脚注 78 说“字符串文字不需要一个字符串(参见 7.1.1),因为一个空字符可能通过\0
转义序列嵌入其中。'
【参考方案1】:
从技术上讲,它的实现定义了将什么代码分配给什么字符。只要它包含某些字符,实现就可以在执行时对字符串使用任意字符编码(称为执行字符集)。实际上,您在普通职业中看到的每个系统都会使用 ASCII 作为执行字符集,除非您在 IBM 大型机上工作,在这种情况下您可能不会问这个问题。
【讨论】:
"实际上,您在普通职业中看到的每个系统都将使用 ASCII 作为执行字符集" 谢谢! ASCII 不是只有 128 个字符吗?可以用有符号字符或无符号字符表示的其他 128 个字符是什么? @RogerCostellochar
的其他 128 个值在使用 ASCII 时没有对应的字符。这也是为什么区分 signed char
和 unsigned char
并不重要的原因,因为无论如何都不使用从 128 到 255 的范围。【参考方案2】:
0..127:是的
-128..-1:是的
是的; char
,无论有符号与否,为 8 位,且 2^8 = 256
是的
【讨论】:
没有。char
至少 8 位(参见 ISO 8899:2011§5.2.4.2.1)。不,系统不需要使用 ASCII。不,系统可以使用二进制补码以外的有符号整数表示。不不不。
谁说过关于 ASCII 的事?
OP 做了:“127 代表 DEL 字符,对吗?”...这取决于字符集。
@Jongware:这将使关于 ASCII 的部分成为更多关于问题的评论,而不是从不涉及任何特定字符集的答案,不是吗?
当然。 OP 似乎不知道这个特殊的区别,所以为什么不教育我一点。以上是关于对于每个整数,它映射到啥字符?的主要内容,如果未能解决你的问题,请参考以下文章
默认情况下使用 Oracle 数据库时,Hibernate 将布尔数据类型映射到啥?