概要
类型转换,分为隐式类型转换和显示类型转化。这里主要讨论含无符号性的隐式类型转化。
发生转换的情形
-
赋值操作
示例:
unsigned char c = -1; // c的结果是255。
-
算术表达式
算术表达式中,含有整型与无符号型,int性会自动转化为无符号型。
示例:unsigned u = 10; int i = -42; cout << u + i <<endl; // int 为32 位,输出为4294967264
隐式类型转化规则
以下用实例来说明各种情况转化的规则。
-
unsigned
与int
算术运算
int
型,正数且不越界,则直接赋值;如果为负数,则负数值加无符号型的模
示例:unsigned u = 10; int i = -42; u = i; cout << u<<endl; // 输出4294967254
-
unsigned val1
与unsigned val2
相减如果两者相加,则进行正常的溢出检出
如果两者相减,规则如下:val1 > val2
正常,不涉及到数值异常变化。val1 < val2
分析:相减,得到负值,相当于得到负数int
型,则负数值加无符号型的模unsigned u = 10; int i = -42; u = i; cout << u<<endl; // 输出4294967254