在c++中添加ASCII
Addition ASCII in c++
我想改变我的字符变量。
using namespace std;
int main()
{
char q;
q='b';
char c=127;
//cout << (int)q << endl<< static_cast<int>('z');
char d= static_cast<char>(static_cast<int>((static_cast<int>('z') +19)));
cout << (int)d << endl;
system("pause");
}
Intupt:
-115
为什么添加变量后赋值-115?
在您的平台上,char
是8位signed
的补码类型。你实际上是在溢出这个类型,溢出signed
整型的行为在c++中是未定义的。不要这样做。
指出:
-
8位是标准强制的
-
char
可为unsigned
或signed.
-
如果
unsigned
it 必须范围为[0,255],255 + 1将为0。unsigned
类型溢出已定义 -
如果
signed
it 可以有范围-128到+127 或 -127到+127。后一个范围(1的补码)在c++ 14中是不允许的。(有趣的是,这并不是一个突破性的变化,因为从1到2的补体移动的差异只会在像您这样的畸形程序中观察到,如果有的话!)
一个简单的补救办法?使用unsigned char
122 + 19 = 141 --> 1000 1101
binary
类型char在这里可能是8位带符号的int,所以第一个位'1'是它的符号位。
1000 1101
就是它在计算机内存中的样子。
但是计算机通常使用一补码来表示负数。
1000 1101
的真码是1111 0011
,int同样,第一个'1'是它的符号位,所以1111 0011
正好是10base
-115
。
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 如何在C++中从两个单独的for循环中添加两个数组
- POCO::PostgreSQL:如何将std::vector支持添加到`Binder::bind`
- 如何仅为一个函数添加延迟
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 使用std::transform将一个范围的元素添加到另一个范围中
- 如何将更多文件夹添加到c++include路径
- 如何将元素添加到数组的线程安全函数?
- QT通过C++添加映射QML项目
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- 如何使用重载的相等(==)运算符向测试用例添加描述
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 如何防止clang格式在流运算符调用之间添加换行符<<
- 使用指针将 ASCII 值添加到整数
- 我正在尝试编写将 ASCII 转换为十进制、添加并转换回 ASCII 的软件
- 在ascii中未正确添加绝对值
- 如何添加2个四位Hexa以生成ASCII字符字节
- 在 c# 中将 int 添加到字符以将其 ascii 值向上移动(就像在 c++ 中一样)
- 在c++中添加ASCII
- 递归函数扫描字符串以添加ASCII