如果我声明有符号的字符,ASCII值会改变吗

Do the ASCII values change if I declare signed char?

本文关键字:ASCII 改变 字符 声明 符号 如果      更新时间:2023-10-16

如果我声明signed char k = 'a',那么k的值是否不是97,这是'a'的ASCII值,因为signed char的范围是-128到127?

如果不是,那么signed char的范围是什么意思?

为什么一个值会突然改变?ASCII表是一个常量列表,在符合ASCII标准的任何语言/环境中,'a'总是匹配97(所以或多或少都是)。

范围由给定类型的变量中可以包含的最小值和最大值组成。

signed char有8个比特,其中1表示符号,意味着实际数据的7个比特,它可以是正的或负的。因此,它可以包含-128到127之间的整数值。

unsigned char有8位,全部用于实际数据,这意味着它可以包含0到255之间的整数值。


(以上只是天真地假设一个char包含8位的现代系统,理论上可能会更多。此外,正如该链接中所解释的,在您的特定系统上,signed char的下限也可能是-127-请使用limits.h来确定)

我不确定这是否是您所要求的,但C++标准承诺基本执行字符集中的所有字符都是非负数。来自C++11 2.3/3:

对于每个基本执行字符集,成员的值应为非阴性,并且彼此不同

基本执行字符集是26个字母(大写和小写)a-z和a-z、数字0-9、ASCII字符集中的大多数标点符号集(例如,不包括"$"answers"@")以及空格和一些核心控制字符。

但是,当使用signed char时,其他字符可能具有否定表示。例如,在一个可能的代码页中,如果char未签名,则Euro字符"€"的值为128,但如果char已签名,则其值为-128。