隐式转换<一>
来源:互联网 发布:在家健身 知乎 编辑:程序博客网 时间:2024/05/17 09:02
关于算术隐式转换一直存在疑惑,今天来捋一捋思路!
1,关于无符号和有符号数的比较
贴一段代码:
输出结果为:
10
0
4294967286
疑点:可是明明是10大于-10哇!!!
解答:在C++语言中,当表达式中存在有符号类型和无符号类型的时候,所有的操作数都会自动转换为无符号类型,因此在进行有符号类型和无符号类型数据比较的时候,编译器自动转换为无符号数。在代码中有三个测试用例,显示了计算机的运算结果。(不是特别了解???)
2,一些小结(选自网上)
1,关于无符号和有符号数的比较
贴一段代码:
#include<iostream>using namespace std;int main(){ unsigned int a = 20; signed int b = -10; signed int c = -20; unsigned int d = -30; if (a > b) cout << a << endl; else{ cout << a + b << endl; cout << a + c << endl; cout << a + d << endl; } return 0;}
输出结果为:
10
0
4294967286
疑点:可是明明是10大于-10哇!!!
解答:在C++语言中,当表达式中存在有符号类型和无符号类型的时候,所有的操作数都会自动转换为无符号类型,因此在进行有符号类型和无符号类型数据比较的时候,编译器自动转换为无符号数。在代码中有三个测试用例,显示了计算机的运算结果。(不是特别了解???)
2,一些小结(选自网上)
a、所有比int型小的数据类型(包括char,signed char,unsigned char,short,signed short,unsigned short)转换为int型。如果转换后的数据会超出int型所能表示的范围的话,则转换为unsigned int型;
b、bool型转化为int型时,false转化为0,true转换为1;反过来所有的整数类型转化为bool时,0转化为false,其它非零值都转为true;
c、如果表达式中混有unsigned short和int型时,如果int型数据可以表示所有的unsigned short型的话,则将unsigned short类型的数据转换为int型,否则,unsigned short类型及int型都转换为unsigned int类型。举个例子,在32位机上,int是32位,范围–2,147,483,648 to 2,147,483,647,unsigned short是16位,范围0 to 65,535,这样int型的足够表示unsigned short类型的数据,因此在混有这两者的运算中,unsigned short类型数据被转换为int型;
d、unsigned int 与long类型的转换规律同c,在32位机上,unsigned int是32位,范围0 to 4,294,967,295,long是32位,范围–2,147,483,648 to 2,147,483,647,可见long类型不够表示所有的unsigned int型,因此在混有unsigned int及long的表达式中,两者都被转换为unsigned long;
e、如果表达式中既有int 又有unsigned int,则所有的int数据都被转化为unsigned int类型。
3,微软面试题
输出结果为:
4294967293
4294967293
-3
解惑:在表达式i*-1中,i是unsigned int型,-1是int型(常量整数的类型同enum),按第e条可以知道-1必须转换为unsigned int型,即0xffffffff,十进制的4294967295,然后再与i相乘,即4294967295*3,如果不考虑溢出的话,结果是12884901885,十六进制0x2FFFFFFFD,由于unsigned int只能表示32位,因此结果是0xfffffffd,即4294967293。
最后,隐式转换部分差不多就写了个算术运算类型的,以后遇到新的问题再来补充!!!
3,微软面试题
#include<iostream>using namespace std;int main(){unsigned int i = 3;unsigned int a;a = i*-1;int b;b = i*-1;cout << i * -1 << endl;cout << a << endl;cout << b << endl;return 0;}
输出结果为:
4294967293
4294967293
-3
解惑:在表达式i*-1中,i是unsigned int型,-1是int型(常量整数的类型同enum),按第e条可以知道-1必须转换为unsigned int型,即0xffffffff,十进制的4294967295,然后再与i相乘,即4294967295*3,如果不考虑溢出的话,结果是12884901885,十六进制0x2FFFFFFFD,由于unsigned int只能表示32位,因此结果是0xfffffffd,即4294967293。
最后,隐式转换部分差不多就写了个算术运算类型的,以后遇到新的问题再来补充!!!
0 0
- 隐式转换<一>
- scala 隐式转换(一)
- JS深入之趣味比较隐式转换(一)
- javaScript数据类型转换—显式转换(一)
- 第十八节 隐式转换与隐式参数(一)
- 从Qt谈到C++(一):关键字explicit与隐式类型转换
- 简单说 通过JS的隐式转换,关键时刻救你一命
- 笔面试题相关知识点整理(一)--隐式类型转换
- 行列转换一
- 颜色空间转换(一)
- 颜色空间转换(一)
- mfc 数据类型转换一
- NAT(网络地址转换)(一)
- 一二维数组转换
- Python数据转换(一)
- 练习一 温度转换
- C#类型转换:隐式转换和显式转换
- JS的类型转换,强制转换和隐式转换
- 嵌入式FreeRTOS操作系统原理
- 解决 ORA-21561: OID generation failed
- 详解Texture2D
- LeetCode 201 Bitwise AND of Numbers Range (位运算)
- iOS7 UIWebView内存泄露问题解决方法
- 隐式转换<一>
- 关于python的calendar包打印日历
- 第4周项目6-多项式求和
- javascript事件
- LoggerFactory.getLogger用法。
- 文章标题
- 标签属性
- 关于方法回调
- IntelliJ IDEA 基本配置入门