为什么c++中有符号字符和无符号字符的ASCII值不同
why does ascii value vary for signed and unsigned character in c++?
我尝试了以下2个代码:
int main()
{
int val=-125;
char code=val;
cout<<"t"<<code<<" "<<(int)code;
getch();
}
我得到的输出是a^ -125
第二个代码是:
int main()
{
int val=-125;
unsigned char code=val;
cout<<"t"<<code<<" "<<(int)code;
getch();
}
我得到的输出是:a^ 131
在尝试这两个代码后,是否可以安全地得出结论,一个字符可以有2个ASCII值,或者我找到ASCII值的方法是有缺陷的?
注:-我无法上传我输出的图片,所以我被迫在标准键盘中没有出现我得到的字符的地方输入输出。
在这两个例子中'code'具有相同的位值。第一个位是1,因为它是一个负数。由于两个'代码'具有相同的值,因此输出字符是相同的(从数字->字符转换将数字视为无符号值)。
之后将字符转换回(有符号)整数。该转换尊重char的类型和符号。
->unsigned char -> int -> int always positive
->char -> int -> int与char具有相同的符号(因为第一个位是1,所以这里是负的)
c++中的无符号整数具有模2n行为,其中n为值位数。
这意味着如果你的char
有8位,那么unsigned char
有模256行为。
这种行为就好像把0到255的值放在一个表盘上。任何产生超过0-255除法的结果的操作都只是有效地进行了换行。就像钟面上有小时的算术
表示赋值-125
得到的值范围是0 ~ 255,即-125 + 256 = 131。
相关文章:
- C++,在int数组中输入字符串或字符会输出0,而不是ascii或error
- 有没有办法通过使用十进制 ASCII 代码自动类型扣除来获取字符?
- RE2 不匹配非 ASCII 字符
- 打印从 0 到 255 的所有 ASCII 字符
- C++ 电话号码字母拨号程序 - 语法错别字?还是非 ASCII 字符?
- 无符号字符打印其 ASCII 值
- 如何从 QString 中包含的十六进制值中获取 ASCII 字符?
- 在结构数据类型中更改每个字符的 ASCII 值
- Cin 和 getline 无法正确保存非 ascii 字符
- C++-将ASCII字符数组中可能的数值转换为字符的最简单方法
- 非ASCII字符的词典排序
- 将char类型指定给int以打印相应的ASCII字符
- 将非 ASCII 字符转换为英语对应字符C++
- 在 C++ 中从 8 位 ASCII 字符创建 7 位 ASCII 文本字符串
- C++ UTF-8 瑞典语字符读取为 ASCII
- 将十六进制字符数组存储在字节数组中,而无需更改为 ASCII 或其他任何东西
- 如何在不将其转换为 ASCII 字符的情况下显示 QByteArray 的十六进制值
- 如何遍历所有 ASCII 字符?
- 读取字符 ASCII 值并将其记录到矢量
- 如何在C++中读取带有ifstream的替换字符?(ASCII 中的 SUB)