1.隐式转换图
- 无条件转换:float ==> double和short/char ==> int
- 类型提升:int ==> long ==> unsigned ==> double
2.例题
int a = 1;
unsigned char b = -1;
char rt = a > b ? 'a' : 'b'
cout << rt << endl;
答案:
b
解:
a b
int (unsigned char ==> unsigned int)
1 四个字节最大的正数
(int ==> unsigned int) unsigned int
1 四个字节最大的正数
因为 1 < 四个字节最大的正数
所以 rt = a > b ? 'a' : 'b' = b
最终答案为 b
- -1在底层以补码的形式存放,有32个1,第一个1为符号位;当unsigned char类型转为unsigned int类型,第一个符号位1就转换成了数据位1,所以就变为了四个字节中的最大的正数