0 前言
在看 C++ primer 复习基础知识时发现,有符号类型跟无符号类型一起运算时会转换类型为无符号类,这就会出现一些意想不到的问题。
1 unsigned char
unsigned char c = 'a';
int a = -1;
cout << c * a << endl;
// 猜猜结果是多少?
结果会是 -97 吗?(‘a’ 的字面值为 97)。
令人惊奇的是居然真的正常(?)
2 unsigned int
unsigned int c = 1;
int a = -1;
cout << c * a << endl;
测试结果如下:
寄汤来咯(
3 unsigned long
unsigned long c = 1;
int a = -1;
cout << c * a << endl;
结果跟 int 一样,又证明了在这个环境下 int 跟 long 没区别
4 unsigned float
想啥呢 没这类型
5 signed char
signed char c = 'a';
cout << c * -1 << endl;
跟第一个一样,那我们扩大点呢?
显然已经超出了 signed char 的范围
说明char类型被提升到了int类型
那反过来呢?
又出问题了
6 总结
C++作为一个静态类型的语言,我们写代码之前还是想好这个变量会参与什么工作再定义吧。 或者去学python(