有符号数与无符号数之间的运算

来源:互联网 发布:一键转发微信源码编程 编辑:程序博客网 时间:2024/05/21 14:57

在C/C++中,经常可能会涉及到一个无符号数与一个有符号数之间的运算。其实这个问题是关于C/C++语言中的整数自动转换原则:当表达式中存在有符号类型和无符号类型时所有的操作数都自动转换为无符号类型。因此,从这个意义上讲,无符号数的运算优先级要高于有符号数。

如:

例子1:

#include<iostream>#include<cstdio>using namespace std;int main(){unsigned int a=20;signed int b=-130;if(b>a)  cout<<"yes"<<endl;else  cout<<"no"<<endl;cout<<a+b<<endl;return 0;}

结果输出:

yes!!

4294967186

其实,在运算之前,a=20,b被转化为4294967166,远远大于a。因此,不论是a和b之间加减运算还是乘除运算,有符号数总是先要转化为无符号数再进行与无符号数运算。


例子2:

#include<iostream>#include<cstdio>using namespace std;int main(){unsigned short int a=20;signed  short int b=-130;cout<<a+b<<endl;if(a<b)  cout<<"yes"<<endl;else  cout<<"no";return 0;}
运行结果为:

-110

no
注意:signed short int 与 unsigned short int之间运算时,有符号数并没有先转化为无符号数再运算!!


而对于浮点数来说,浮点数(float,double)实际上都是有符号数,unsigned 和signed前缀不能加在float和double之上,当然就不存在有符号数根无符号数之间转化的问题了。



参考:http://www.52rd.com/Blog/Detail_RD.Blog_lentil_13982.html?WebShieldDRSessionVerify=FUjFZscItta2SWTIpihz


原创粉丝点击