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(