关于无符号整型和符号整型自动类型转换的问题
http://www.52rd.com/Blog/Detail_RD.Blog_lentil_13982.html?WebShieldDRSessionVerify=4x3vZape3zHZAQNEc6LO
我是看到了这个帖子有了问题。大家知道如果一个无符号整型和符号整型做加法运算,系统会做类型提升,将符号整型变为无符号整型之后再与符号整型做加法。那如果符号整型的那个变量本身是负数,被变成符号整型,负号不是被去掉了吗?算出来的结果不是不正确了吗?
貼一下我发的链接的其中一段文字:
首先进行一个实验,分别定义一个signed int型数据和unsigned int型数据,然后进行大小比较:
unsigned int a=20;
signed int b=-130;
a>b?还是b>a?实验证明b>a,也就是说-130>20,为什么会出现这样的结果呢?
这是因为在C语言操作中,如果遇到无符号数与有符号数之间的操作,编译器会自动转化为无符号数来进行处理,因此a=20,b=4294967166,这样比较下去当然b>a了。
再举一个例子:
unsigned int a=20;
signed int b=-130;
std::cout<<a+b<<std::endl;
结果输出为4294967186,同样的道理,在运算之前,a=20,b被转化为4294967166,所以a+b=4294967186
我自己在Linux下做了运算,发现结果确实是这样。为什么编译器会出现这样的问题?这样不是很不方便吗,还是说这是coder应该注意的问题,要避免做这样的编写?