写在前面:
母语是Java,后来学了C++11,这两个语言的基本数据类型隐式转换不太一样,有点晕,整理一下
整理自网络和书籍,标明出处
C++
基本数据类型
——http://www.cnblogs.com/wangduo/
整型
- (signed) int
格式说明符:d
简写:int,long,signed
4 个字节,32 位,取值范围:-231~231-1
- unsigned int
格式说明符:u
简写:unsigned
4 个字节,32 位,取值范围:0~232-1
- (signed) short int
格式说明符:hd
简写:short
2 个字节,16 位,取值范围:-215~215-1
- unsigned short int
格式说明符:hu
2 个字节,16 位,取值范围:0~216-1
- (signed) long int
格式说明符:ld
不同的平台有不同的规定
一些是4字节,一些是8字节
- unsigned long int
格式说明符:lu
不同的平台有不同的规定
一些是4字节,一些是8字节
- (signed) long long int
格式说明符:lld
简写:long long
8 个字节,64 位,取值范围:-263~263 -1
- unsigned long long int
格式说明符:llu
8 个字节,64 位,取值范围:0~264 -1
浮点型
- float
格式说明符:f
4 个字节,32 位,取值范围:3.4*10-38~3.4*1038
双浮点型
- double
格式说明符:lf
8 个字节,64 位,取值范围:1.7*10-308~1.7*10308
- long double
格式说明符:lf
C标准没有详细规定,只说了sizeof(long double)>=sizeof(double)
字符型
- char
格式说明符:c
如果将中文存储在char中,会导致溢出而出现不可预期的字符如乱码,见[◹]字符集编码
1 个字节,8位,取值范围:0~28-1
- wchar_t
不同的C或C++库有不同的规定
4 或 8 个字节,16位或32位,取值范围:0~216-1 或 0~232-1
字符串型
- string
格式说明符:s
C++引入的string 类类型
依据平台和编译选项的不同,最大容量会有变化
大部分32位环境或者系统中,最大容量是0~232-1
布尔型
- bool
格式说明符:没有!别乱用,小心某些平台爆炸
1个字节,取 0 或 1
隐式转换
在混合类型运算,赋值,传参,返回时,会发生隐式转换
基本原则:低精度 –> 高精度
不知道图是谁做的,都传糊了
——http://www.runoob.com/cplusplus/cpp-data-types.html
——《信息学奥赛一本通》
Java
基本数据类型
- byte
1 个字节,8 位,取值范围:-128~127
- short
2 个字节,16 位,取值范围:-2^15~2^15-1
- int
4 个字节,32 位, 取值范围:-2^31~2^31-1
- long
8 个字节,64 位,取值范围:-2^63~2^63 -1
- float
4 个字节,取值范围:-3.403E38~3.403E38
- double
8 个字节,取值范围:-1.798E308~1.798E308
- char
在java中,字符天然就是unicode表示,所以char就天然的可以保持人类理解的char
2 个字节,16位,取值范围:0~216-1
- String
在java的api中定义为char数组的形式
依据平台和编译选项的不同,最大容量会有变化
大部分32位环境或者系统中,最大容量是0~232-1
- boolean
1个字节,取 true 或 false
不支持Unsigned无符号数据类型,但可以轻而易举的完成Unsigned转换
隐式转换
在混合类型运算,赋值,传参,返回时,会发生隐式转换
基本原则:低精度 –> 高精度