有符号数与无符号数之间的运算
来源:互联网 发布:一键转发微信源码编程 编辑:程序博客网 时间: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
阅读全文
0 0
- 有符号数与无符号数之间的运算
- 有符号数与无符号数之间运算问题
- 有符号数与无符号数之间运算问题
- 有符号数与无符号数之间运算问题
- 有符号数与无符号数之间运算问题
- 有符号数与无符号数之间运算问题
- 有符号数与无符号数之间运算问题
- 有符号数与无符号数之间运算问题
- 有符号数与无符号数的运算
- 有符号数与无符号数之间的转换
- 无符号与有符号数之间的强制转换
- 有符号数与无符号数运算
- 有符号数与无符号数运算问题
- 有符号数与无符号数运算
- 有符号数和无符号数的运算
- 有符号数和无符号数之间的转换
- 有符号数、无符号数之间的转换
- C语言中无符号数和有符号数之间的运算
- JavaScript使用正则表达式
- DNS服务器搭建
- linux系统编程模拟火车售票
- spark常见问题汇总
- 从包图分析逻辑层架构
- 有符号数与无符号数之间的运算
- 第7章 IoC容器 VI (Component) -- Spring4.3.8参考文档中文版
- 第一天:html、css的初步学习和制作七巧板
- 判断一个链表是否有环
- 啥时候使用inline-block或是float使用
- AlexNet
- 欢迎使用CSDN-markdown编辑器
- Java方法的重写与重载
- DNS负载均衡