c++基础类型之signed、unsigned的一个细节

数值型

    c++中,对于 int、long、int64、...等这些数值类型,如果是有符合的,则类型前加不加 signed 其效果都是一样的。

比如如下声明:

int nA;     // 与 signed int nA; 声明一样
long nB;   // 与signed long nB; 声明一样
int64 nC; // 与signed int64 nC; 声明一样

字符

    对于char需要小心。许多人知道 char 与 unsigned char 是不同的,但不一定会知道 char 与 signed char 其实不一定是相同的。为什么?因为编译器对于 char 其识别为是 char 类型,对于 signed char 是识别为 signed char 类型,而不是 char 类型。

    或许也正是该点原因,所以char变量在不同的编译器下值可能会不同的根本原因所在(记得在制作xx游戏时,就有遇到过这个坑,N个人查了好久才查出来)。至于编译器为什么如此设计,个人猜测可能是由于历史原因,导致后来的c++标准没办法统一该点标准。

    下面请看下面测试代码及测试结果:

 1     cout << (typeid(char) == typeid(signed char)) << endl;
 2 
 3     auto vvvv = typeid(char).name();
 4     cout << vvvv << endl;
 5     vvvv = typeid(signed char).name();
 6     cout << vvvv << endl;
 7     vvvv = typeid(unsigned char).name();
 8     cout << vvvv << endl;
 9 
10     vvvv = typeid(int).name();
11     cout << vvvv << endl;
12     vvvv = typeid(signed int).name();
13     cout << vvvv << endl;

输出结果:

原文地址:https://www.cnblogs.com/tongy0/p/6379468.html