C 类型转换 隐式
来源:互联网 发布:刷网站访问量软件 编辑:程序博客网 时间:2024/05/19 16:47
类型转换问题需要十分重视,很多程序问题都处在这里,尤其是隐式类型转换。懂得规则,才能胜出。
先看一段代码,如果能全部猜对输出,恭喜你,过关!
using namespace std;int main(void){unsigned int a = 20;int b = -a;long long c = -a;long d = -a;double e = -a;float f = -a;__int32 g = -a;__int64 h = -a;cout<<a<<endl;cout<<b<<endl;cout<<c<<endl;cout<<d<<endl;cout<<e<<endl;cout<<f<<endl;cout<<g<<endl;cout<<h<<endl;return 1;}
正确输出:
看到这里,说明我们对于数据类型的隐式转换还有一些疑惑。讲解之前需要保证了解计算机如何表示负数
在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值位统一处理;同时,加法和减法也可以统一处理。
正整数的补码与原码相同。负整数的补码,符号位不变,数值位各位取反,最后整个数加1。
举个例子,比如十进制整型5(32位机器):
原码:00000000 00000000 00000000 00000101
反码:11111111 11111111 11111111 11111010
补码:11111111 11111111 11111111 11111011(-5 反码+1)
隐式类型转换原则:
1、当表达式中存在有符号类型和无符号类型的时候,所有的操作数都自动转换为无符号类型。
2、基本数据类型 基本数据类型的转换以取值范围的作为转换基础(保证精度不丢失)。隐式转换发生在从小->大的转换中。
3、子类对象可以隐式的转换为父类对象。
4、转换顺序 char >> unsigned char >> int >> unsigned int >> long long >> unsigned long long
5、转换顺序 char >> unsigned char >> int >> unsigned int >> double >> unsigned double
6、赋值运算时,优先转换为被赋值变量的类型。
解释一下开头代码结果:
int b = -a; -a 即符号位置1 所以b为-20
long long c = -a; 符号位变为1,同时拷贝给c的低字节位置,得到很大的正数。e f h的结果与c一样。
long d由于long在我的电脑上和int一样是32位的,所以d为-20。g的结果与d一样。
- C 类型转换 隐式
- <C/C++> 类型转换
- C/C++:类型转换
- C类型转换
- C#.NET 类型转换
- 类型转换(C#)
- C指针类型转换
- 类型转换--c语言
- C语言类型转换
- C语言类型转换
- C/C++类型转换
- C语言类型转换
- C++_类型转换
- objective-c 类型转换
- objective-c类型转换
- 标准C 类型转换
- c类型转换
- C类型转换
- 分享android开发过程中用到的一些开源框架
- 编程实现获取linux服务器cpu、内存和磁盘使用率
- Apache Kafka-0.8.1.1源码编译
- 轻松使用Eclipse CDT进行Java JNI编程
- dvsdk encode 中video线程向writer线程发送的264数据类型及其格式
- C 类型转换 隐式
- 闲工夫既然已经很容易
- erlang udp即时通讯服务器开发浅谈(一)
- 基于HTML5 的localStorage 实现数据本地缓存
- Carmageddon verwendet Fifa Ultimate Team Coins kaufen
- 移动Web开发,数据压缩,后端压缩传输的json格式数据
- 在64位系统下在VS中进行FFTW配置
- 如何辨别僵尸粉--利用信息熵、图灵测试和数字化社会网络
- 调整好自己的心态把握好时间的管理