从Java到C++——基本数据类型
基本数据类型是C++最基本的内容,虽然各种计算机语言的基本数据类型的含意和用法大体相同,但各种语言下基本数据类型的字节大小,数值范围等是不一样的,这也是程序开发都必须要了解的。
Java中有8种基本的数据类型,详细内容请参见《Java中的50个关键字》 ,C++中基本数据类型的各类就多了。详细如下:
C++中,基本数据类型也称内置类型,有算术类型和空类型。空类型(void)没有具体的值,只用于某些特殊的场合,如函数的返回值void。算术类型有整形数、浮点数、布尔类型和字符。
下表列出了C++标准规定的尺寸的最小值,C++标准只给定了尺寸的最小值,同时允许编译器赋予这些类型更大的尺寸。所以同一个数据类型在不同平台不同操作系统下尺寸大小有可能不同。
C++:数据类型
分类 | 类型 | 含义 | 最小尺寸 |
整形数 | short | 短整形 | 16位 |
int | 整形 | 16位 | |
long | 长整形 | 32位 | |
long long | 长长整形 | 64位 | |
浮点数 | float | 单精度浮点数 | 6位有效数字 |
double | 双精度浮点数 | 10位有效数字 | |
long double | 扩展精度浮点数 | 10位有效数字 | |
布尔类型 | bool | 布尔类型 | 未定义 |
字符 | char | 字符 | 8位 |
wchar_t | 宽字符 | 16位 | |
char16_t | 16位unicode字符 | 16位 | |
char32_t | 32位unicode字符 | 32位 |
我在win7 x64系统上用VS2010和VS2013上测试了一下以上各种数据类型的大小如下:
void sizeTest() { cout << "short: " << sizeof(short) << endl; cout << "int: " << sizeof(int) << endl; cout << "long: " << sizeof(long) << endl; cout << "long long: " << sizeof(long long) << endl; cout << "float: " << sizeof(float) << endl; cout << "double: " << sizeof(double) << endl; cout << "long double: " << sizeof(long double) << endl; cout << "bool: " << sizeof(bool) << endl; cout << "char: " << sizeof(char) << endl; cout << "wchar_t: " << sizeof(wchar_t) << endl; cout << "char16_t: " << sizeof(char16_t) << endl; cout << "char32_t: " << sizeof(char32_t) << endl; }
结果为:
这里上面的int就是4个字节32位,大于标准规定的16位。
整形数和char类型又有带符号的和无符号的之分
short、int、long、long long、char都有带符号和无符号两种。带符号的(signed)类型可以表示正数、负数和0,short、int、long、long long、char默认都带符号的。无符号的(unsigned)类型则只能表示正数和0,只需要在对应的类型名前面加unsigned,如unsigned int和unsigned char。在计算机中数值是以二进制的形式存储的,带符号的类型第一位是符号位,用于表示正负数,1表示负数,0表示正数;无符号的类型没有符号位,所有位数都用于表示数值的大小。如以short类型的为例:
7表示成如下
00000000 00000111
-7表示:
10000000 00000111
假设一个数据类型的尺寸大小为n位,则带符号的表示的数值范围是-2n-1—2n-1-1; 无符号的表示的数值范围是0—2n-1.
bool类型是只表示true和false
bool是用于表示正确(true)和错误(false)的一种逻辑类型,其中true和false是一种标识符,应该是一种宏定义,true为1,false为0。在程度中整数和浮点数都可以给bool类型的变量赋值,但只有当值为0时表示假,非0时都表示真。如下:
void BoolTest() { bool b1 = true; bool b2 = false; bool b3 = 0; bool b4 = 1; bool b5 = 5; bool b6 = -8; bool b7 = 1.25; cout << "true: " << true << endl; cout << "false: " << false << endl; cout << "b1: " << b1 << endl; cout << "b2: " << b2 << endl; cout << "0: " << b3 << endl; cout << "1: " << b4 << endl; cout << "5: " << b5 << endl; cout << "-8: " << b6 << endl; cout << "1.25: " << b7 << endl; }
结果为:
true: 1
false: 0
b1: 1
b2: 0
0: 0
1: 1
5: 1
-8: 1
1.25: 1
short和short int是等价的
在程度中常常能看到short int,是否又有什么不同呢?short和short int应该是等价的,short应于修饰int,short是short int的简写。还有long和long int也是等价的。
如下程度:
short st1 = 10; short int st2 = 10; long l1= 20; long int l2 = 20; cout << st1 << endl; cout << st2 << endl; cout << l1 << endl; cout << l2 << endl; cout << "short: " << sizeof(short) << endl; cout << "shot int: " << sizeof(short int) << endl; cout << "long: " << sizeof(long) << endl; cout << "long int: " << sizeof(long int) << endl;
结果如下:
10
10
20
20
short: 2
shot int: 2
long: 4
long int: 4
- 上一篇: C++如何跳出多层循环
- 下一篇: 再探java基础——break和continue的用法