1.字符型
- 种类:char / signed char / unsigned char
- 注意:尽管类型有三种,但是字符的表现形式只有两种:有符号和无符号。char属于两面派,实际上会表现为上述两种的一种,具体由编译器决定。因此,尽量不要用char
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.有符号和无符号的运算
- 同种类型的有无符号算术运算:有符号{运算}无符号 =>无符号
这里指的是同种类型的,因为同种类型的有无符号的两个数,无符号的数值表示的值更大
int u1 = 10;
unsigned int u2 = -42;
std::cout<< u1 + u1 << std::endl;//输出84
std::cout<< u1 + u2 << std::endl;//如果int是32位,输出4294967264
- 同中类型的有无符号比较:特别是循环中常用的比较语句
//正确的
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;
}
注意:用于循环条件比较的变量:
大于的形式,最好是有符号的;
小于的形式,最好是无符号的。