面向对象编程(OOP)的本质就是设计并拓展数据类型的过程。设计自己的数据类型目的是为了让数据得到匹配,如果开发者可以顺利做到这一点,就不难发现以后使用数据就会容易得多。然而,在创建自己数据类型的前提是必须了解并掌握C++中内置的数据类型,它们是创建自己数据类型的基础条件。
内置的数据类型分两组:基本类型和复合类型。本章知识点主要介绍基本数据类型,即整数和浮点数。似乎只有两种数据类型,但C++知道,没有任何一种整型或浮点型可以满足所有的编程需求,因此它对这两种数据类型作了升级变形,后面会向大家介绍数组、字符串、指针和结构。
简单的变量
程序在运行的过程中往往都要存储数据,譬如王者荣耀需要存储英雄的战绩、伤害值等。为了将数据存储在计算机中,程序必须记录三个基本属性:
- 信息存储在哪里
- 需要存储什么值
- 存储什么类型的信息
c++
int harm;
harm = 900
例如上面的语句是在告诉程序,它正在存储一个整数,并使用名称harm
来表示该整数的值。计算机内部实际上是找到一块能够存储整数的内存,将该内存单元标记为harm
,并将900复制到该内存单元中;然后在使用程序时便可以使用harm
来访问这个内存单元。
不过程序是不会告诉用户,它具体存在哪个单元中,实际上可以使用&
运算符来检索(查找)harm
的内存地址,在后面会向大家介绍指针知识时会讲到。
变量名
在定义变量名时建议大家使用有一定含义的变量名。例如,你要定义一件商品的价格可以使用变量名price
,而不是用x
或者a
、b
等。
下面来说一下起变量名时需要注意的事项:
- 只能使用数字、字母和下划线
- 变量中第一个字符不能是数字
- 变量名区分大小写
- 不能将C++中的关键字用作名称,如
cout
、cin
等 - 以两个下划线或者下划线和大写字母打头的名称被保留给编译器和其要使用的资源使用。这句话可能有点绕,意思是这样命名也没有错,但是会导致编译器的行为具有不确定性,一般也不允许用户这样命名。
- C++一般对变量名的长度没有限制,只是有些平台会对此限制。
另外,如果你想要表达的变量需要由几个单词组合而成,那么建议使用下划线进行拼接。例如,我现在要表达苹果价格,我会这样命名:apple_price
整型
整型其实非常好理解,它代表的是没有小数部分的数字,如0,-5,98,1000,-2025等。现在思考一个问题,计算机能够存储所有的整数吗?
答案是显而易见的,当然是不能!
往往来说为了存储较大的数字,那么计算机中就得用较大的内存来存储。C++提供了好几种整型的类型,为的就是不要浪费过多的内存。
C++中提供了char、short、int、long
和C++11中新增了long long
,每个版本都提供了有符号和无符号的版本。所谓有无符号的意思是,有符号的类型则可以表示正负数;而无符号则表示不能存储负数。
整型short、int、long和long long
计算机内存由位(bit)的单元组成,不同长度的整型也会由不同数目的位来存储值,最多能表示4种不同的整数宽度。例如
- short至少16位
- int至少和short一样长
- long至少32位,且至少和int一样长
- long long至少64位,且至少与long一样长
计算机内存的基本单位是位(bit)。可以将位看作是电子开关,0代表关,1代表开。8位的内存可以设置出256种不同的组合,每一位都有两种设置。所以8位的总组合数为2×2×2×2×2×2×2×2=256。因此8个单元可以表示0-255或者是-128到127。每多一位那么组合数则会加倍。
字节(byte)通常指的是8位的内存单元,从这个意义上说,字节是计算机内存的度量单位。1KB=1024字节、1MB=1024KB
如果想要知道你的系统中的整数最大可以支持的长度,可以使用c++中的工具sizeof
实现,以int
类型为例,在不同的系统中它所表示的位数可能不同,可能是16位也可能是32位。
另外,除了iostream
这个头文件外,还需要添加一个新的头文件climits
,这个头文件中包含了整型限制的信息。具体来说,是它定义了表示各种限制的符号名称。例如:INT_MAX
为int
最大值,CHAR_BIT
为字节位数。
limit.cpp
c++
#include <iostream>
#include <climits>
int main()
{
using namespace std;
int n_int = INT_MAX;
short n_short = SHRT_MAX;
long n_long = LONG_MAX;
long long n_llong = LLONG_MAX;
cout << "int is " << sizeof(int) << " bytes" << endl;
cout << "short is " << sizeof n_short << " bytes" << endl;
cout << "long is " << sizeof n_long << " bytes" << endl;
cout << "long long is " << sizeof n_llong << " bytes" << endl;
cout << "maximum values: " << endl;
cout << "int: " << n_int << endl;
cout << "short: " << n_short << endl;
cout << "long: " << n_long << endl;
cout << "long: " << n_llong << endl;
cout << "minimum int value = " << INT_MIN << endl;
cout << "Bits per byte = " << CHAR_BIT << endl;
return 0;
}
输出结果如下:
int is 4 bytes
short is 2 bytes
long is 4 bytes
long long is 8 bytes
maximum values:
int: 2147483647
short: 32767
long: 2147483647
long: 9223372036854775807
minimum int value = -2147483648
Bits per byte = 8
下面对程序做简单的解释说明:
1、运算符sizeof和头文件 limits
sizeof
运算符指出,在使用8位字节的系统中,int
的长度位4个字节。可以对变量名或类型名使用sizeof
运算符,不过呢使用类型名的时候需要将它放在括号内,变量名则可以不需要。
最后,大家可以尝试去写写下面的代码,看看它的执行结果会是什么?
cpp
#include <iostream>
using namespace std;
int main() {
int intVar;
double doubleVar;
char charVar;
bool boolVar;
// 使用 sizeof 操作符获取不同数据类型的字节大小
cout << "Size of int: " << sizeof(intVar) << " bytes" << endl;
cout << "Size of double: " << sizeof(doubleVar) << " bytes" << endl;
cout << "Size of char: " << sizeof(charVar) << " bytes" << endl;
cout << "Size of bool: " << sizeof(boolVar) << " bytes" << endl;
// 也可以直接对类型使用 sizeof
cout << "Size of float: " << sizeof(float) << " bytes" << endl;
return 0;
}
总结
本次文章的主要带着大家学习变量名的起名方式,以及所有整型类型的认识以及它们所包含的长度和字节数,希望大家能够通过这篇文章学习并掌握变量与整型相关的知识。
带你开始学习C++的知识。
路漫漫其修远兮,吾将上下而求索。
与君共勉之!