隐式转换--unsigned 和 signed
int m, n; unsigned int s; s = m + n
这里有两个错误
1)有符号转无符号
2)整型溢出
这里主要说有符号转无符号
一般的都认为 m , n都强制转换为 无符号数,这是错误的!!!
这里 m, n依然是无符号的,m + n的结果也是无符号的,然后再把这个结果转成 unsigned int 传给 s。
如果让 m , n 在运算之前就转换为unsigned int,就需要将 m, n至少其中一个转换为 unsigned int 类型。
如下:
int m, n; unsigned int s; s = (unsigned int)m + n;
这样 n 也会强制转换为unsigned int类型,再参与运算。
其实不止unsigned int /int,只要涉及到低精度强制转换高精度数据类型的运算都适用。

浙公网安备 33010602011771号