所有的编程语言中都有一种很重要的常量——字面值常量。这篇博客主要对比一下C++和java中的两种字面值常量,作为一个备忘。
C++
-整型
c++中主要有short、int、long、long long;十进制默认是有符号数,是后三者中尺寸最小的那个,对于八进制和十六进制,按int, unsigned int, long, unsigned long, long long, unsigned long long 顺序使用。
- 浮点数类型
默认为double - 字符串
默认为c风格的字符串。
指定字面值的类型
整型
后缀 最小匹配类型 u unsigned l long ll long long 浮点型
后缀 类型 f float l long double
附上一段在java中编译不通过的代码
#include <iostream>
using namespace std;
int main()
{
float a = 3.14;//若放在Java中,float类型的无法接受3.14这一double类型的变量,将会编译报错,c++正常运行。
cout << a<<endl;
}
Java
- 整型
java是要跨平台的,所以不同于c,对基本数据类型的位数进行了详细规定和设计。
java没有任何unsigned类型!!!
类型 | 字长 | 备注 |
---|---|---|
byte | 1字节 | 常用于文件 |
short | 2字节 | 不常用 |
int | 4字节 | 10亿以内,默认字面值 |
long | 8字节 | 统计全球人数 |
- 浮点型
类型 | 字长 | 备注 |
---|---|---|
float | 4字节 | 6、7位有效数字 |
double | 8字节 | 15、6位有效数字,默认字面值 |
此外,java 基本数据类型中还有char和boolean两种。
java中的类型转化
拓展(可以默认完成的)
基本原则
(1)布尔型和其它基本数据类型之间不能相互转换;
(2)byte型可以转换为short、int、、long、float和double;
(3)short可转换为int、long、float和double;
(4)char可转换为int、long、float和double;
(5)int可转换为long、float和double;
(6)long可转换为float和double;
(7)float可转换为double;
运算中的转化
单操作数运算符:
(1)当运算符为取正运算符(+)。取负运算符(-)或按位取反运算符(~)时,如果操作数为byte、char或short,则先被转换为int,再参与运算。
(2)当运算符为自动递增运算符(++)或自动递减运算符(–)时,如果操作数为byte,short或char,则不用先被转换为int,而是直接参与算术运算,且运算结果类型也不变。
(3)如果操作数为int或long,则无论运算符为何种单操作数运算符,均不发生类型转换,且运算结果类型也不变。
双操作数运算符:
(1)如操作数之一为double,则另一个操作数先被转化为double,再参与算术运算。
(2)如两操作数均不为double,当操作数之一为float,则另一操作数先被转换为float,再参与运算。
(3)如两操作数均不为double或float,当操作数之一为long,、则另一操作数先被转换为long,再参与算术运算。
(4)如两操作数均不为double、float或long,则两操作数先被转换为int,再参与运算。也就是说,对于小于等于int类型的数据,要先转化成int在计算。
* 窄化(一般需要强制转化的)*
(省略)