隐式转换--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,只要涉及到低精度强制转换高精度数据类型的运算都适用。

 

posted @ 2020-08-15 16:43  阿拉灯神丁0  阅读(277)  评论(0)    收藏  举报