1.字符型

  1. 种类:char / signed char / unsigned char
  2. 注意:尽管类型有三种,但是字符的表现形式只有两种:有符号和无符号。char属于两面派,实际上会表现为上述两种的一种,具体由编译器决定。因此,尽量不要用char

2.有符号和无符号的类型转换

  1. 有符号转无符号:如果超出范围,结果是初始值对无符号类型表示数值总数取模后的余数
  2. 无符号转有符号:如果超出范围,结果是未定义的
bool b = 42;        //b的值为真
int i = b;            //i的值为1

i = 3.14;            //i的值为3
double pi = i;        //pi的值为3.0

usigned char c1 = -1;//假设char占8bit,c1的值为255
signed char c2 = 256;//假设char占8bit,c2的值为未定义的

3.有符号和无符号的运算

  1. 同种类型的有无符号算术运算有符号{运算}无符号 =>无符号
    这里指的是同种类型的,因为同种类型的有无符号的两个数,无符号的数值表示的值更大
int u1 = 10;
unsigned int u2 = -42;
std::cout<< u1 + u1 << std::endl;//输出84
std::cout<< u1 + u2 << std::endl;//如果int是32位,输出4294967264
  1. 同中类型的有无符号比较特别是循环中常用的比较语句
//正确的
for(int i = 10;i >= 0; --i){
    std::cout << i << std::endl;
}
//错误:变量u永远不会小于0,循环条件一直成立
for(usgned int u = 10;u >= 0; --u){
    std::cout << i << std::endl;
}

注意:用于循环条件比较的变量:
大于的形式,最好是有符号的;
小于的形式,最好是无符号的。