如果我声明有符号的字符,ASCII值会改变吗
Do the ASCII values change if I declare signed char?
如果我声明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。
相关文章:
- 变量没有改变?通过向量的函数调用
- 如何改变c++应用程序的视觉效果
- C++,在int数组中输入字符串或字符会输出0,而不是ascii或error
- C++在不同线程中改变向量
- 如何访问和改变存储在矢量C++中的对象
- 为什么我的C++程序的程序集输出充满了 .ascii,没有汇编代码?
- 在C++行尾写一个分号或多个分号是否会改变任何内容
- 有没有办法通过使用十进制 ASCII 代码自动类型扣除来获取字符?
- 如何将字节数组元素替换为修改的十六进制 ASCII 符号?
- ascii 和 unicode 在处理级别有什么区别吗?
- 在C++中使用 ASCII 代码将输入从小写转换为大写
- 弄清楚如何在C++中将整数读入 ASCII
- 为什么字符串的 move() 会改变内存中底层数据的位置?
- 为什么 c++ 动态数组的大小没有改变?
- 为什么提升图库的 read_graphviz() 函数会改变节点的索引
- 如何修复艺术ASCII,我点击一个字母就可以了,但输入一个阶段艺术出来了
- 使用指针将 ASCII 值添加到整数
- 用于 ASCII 的环绕式 C++
- 如果我声明有符号的字符,ASCII值会改变吗
- 改变ascii码和前置字符到字符串在c++