类型转换
记录一下看 C++ primer 觉得易忘知识点
bool b = 42;
int i = b;
i = 3.14;
double pi = i;
unsigned char c = -1;
signed char c2 = 256
前面的东西都好理解 主要是后面char的两个 之前没接触过。无符号类型和有符号类型的区别
无符号类型
当我们赋给无符号类型一个超出它表示范围的值的时候,结果是初始值对无符号类型表示数值总数取模后的余数。在上面代码中,char 是8比特,可以表示0到255。因此,当我们赋了一个超出区间外的值,结果就是该值对256取模后的余数。所以-1对256取模是255,结果就是255
有符号类型
当我们赋给有符号类型一个超出范围的表示值的时候,结果是未定义的,此时,程序可能继续工作,可能奔溃,也可能生成垃圾数据。具体应该看编译器
实际编程中,需要避免这种情况的产生,因为不同编译器对于该情况的结果可能是不同的。假如将该程序移植,会导致莫名其妙的错误的产生。debug 会弄到想死
实际编程中可能出现的情形
例如 在一个算术表达式中 既有int 类型 又有无符号类型的时候,int 类型会自动转成无符号类型。如果没注意这点就会出现错误
unsigned int u = 10;
int i = -42;
cout << u + i << endl;
|