C++有许多类型的变量,通常大家把它们划分为两大类:
基本类型(basic types)
高级类型。
对于基本类型的变量,常用的有:
整型变量(int,short,long):用于存储整数值。
浮点型变量(float,double):用于存储小数值。
字符型变量(char):用于存储单个字符。
布尔型变量(bool):用于存储true或false值。
指针变量(*):用于存储内存地址的变量。
对于其他类型的变量,比如枚举类型、数组、结构体、类等,这些都属于C++中的高级类型。
今天这篇文章主要讨论整型变量。
什么是整型变量
所谓整型变量,顾名思义就是用来存储整数值,可以使用关键字int来声明一个整型变量。下面是一个例子:
int age = 25;
int seconds = 66666;
在这个例子中,我们声明了两个整型变量:age和seconds,并且分别赋值为25和66666。除了int外,C++的整型变量还有一些子类型,比如 short、long、long long等。
整型变量的子类型
上面提到C++的整型变量用来存储一个整数,同时我们也提到整型变量有不同的子类型。既然存储的都是整数,那为什么需要不同的子类型呢?这主要是为了更好地使用内存资源。对于不同的子类型,它们所占用计算机系统的大小和范围是不一样的:
int: 整型变量,通常为32位,范围为-2147483648到2147483647。
short int: 短整型变量,通常为16位,范围为-32768到32767。
long int: 长整型变量,通常为32位,范围为-2147483648到2147483647。
long long int : 长长整型变量, 通常为64位, 范围为 -9223372036854775808 到 9223372036854775807
char: 字符型变量,通常为8位,范围为-128到127。
unsigned int: 无符号整型变量, 通常为32位,范围为0到4294967295
unsigned short int : 无符号短整型变量, 通常为16位,范围为0到65535
unsigned long int : 无符号长整型变量, 通常为32位,范围为0到4294967295
unsigned long long int : 无符号长长整型
以上面的两个变量age和seconds为例:
age表示一个人的年龄。以目前人类的医疗技术来讲,一个人估计也就只能活个百来岁,所以实际上我们完全不需要int类型,使用short类型就绰绰有余了(事实上,我们使用char或者是unsigned char对人类的年龄而言也基本够用了)。如果使用short类型,那么就比int整整节省了一半的内存。
seconds表示离当前时间的秒数。由于一天有24小时,每个小时有3600秒,所以一天中所经历的秒钟数最大可以到24*3600=86400。这个时候如果使用short显然就不够用了,而应该使用范围更大的整型,如int,甚至是long long。
需要注意的是,C++标准并没有严格规定整型变量中各个子类型的大小,因此以上所给出的大小和范围仅供参考,实际情况请参考您所使用的硬件、操作系统、编译器等。或者,您也可以使用sizeof来获得实际长度。下面的代码是测试我所使用的平台上不同整型变量的字节长度:
#include <iostream>
using namespace std;
int main() {
cout << "int: " << sizeof(int) << endl;
cout << "short: " << sizeof(short) << endl;
cout << "long: " << sizeof(long) << endl;
cout << "long long: " << sizeof(long long) << endl;
return 0;
}
运行后输出的结果罗列在下方。可以看到,short为2个字节,long long为8个字节,而int和long均为4个字节:
int: 4
short: 2
long: 4
long long: 8
无符号整型和有符号整型
C++中的整型变量除了字节长度之分外,还有符号之分:有符号整型(siged)和无符号整型(unsigned)。
有符号整型(signed)是指可以存储正整数和负整数的整型变量。在C++中,默认整型都是有符号整型。比如int,long int, short int 等。
无符号整型(unsigned)是指只能存储非负整数的整型变量。在C++中使用unsigned关键字声明无符号整型变量。 比如unsigned int,unsigned long int,unsigned short int 等。
再回到age和seconds的例子:
如果我们使用age表示一个人的年龄,考虑到一个人的年龄永远不可能为负数,因此我们就可以使用无符号整型,如unsigned int或unsigned short,来定义这个变量。
如果我们使用seconds表示某个日期离今天所相差的秒钟数,那么这个变量就是可正可负的:对于未来的任何一天,这个相差值就是正的,而对于已经过去的任何一天,这个相差值则是负的。因此,对于这个变量,我们就需要使用有符号整型。
总结
整型变量用于存放整数。
整型变量有不同的类型,不同类型所占用的内存大小不同。如int通常为4个字节,而short通常为2个字节。
整型变量有符号之分。无符号型只能表示非负数,而有符号型则可正、可负、可为0。
番外篇:sizeof不是函数!
在上面打印不同整型变量的字节长度的代码中,我多次使用了sizeof。sizeof可以用来获取一个变量或类型的大小,其单位为字节(byte)。这里需要强调的是,虽然sizeof的使用方式看上去像是一个函数(之后的章节我们会介绍函数),但它其实是一个运算符,而不是一个函数。