文章目录
2 数据类型
2.1 简单变量
程序通常都需要存储信息,而当我们把信息存储在计算机中,程序必须记录3个基本属性:
- 信息要存储在哪里?
- 要存储什么值?
- 存储何种类型的信息
在下面的小节中,我们将会着重谈到这些东西。
C++规定在创建一个变量或者常量时,必须要指定相应的数据类型,否则无法给变量分配内存。
那上面这个图来举例,我们给利用int指定系统给变量开辟多大的空间,10用来往空间里面存放数据,而a作为变量名用来操纵这个数据,虽然C++没有告诉你这个值存储在内存的什么位置,但程序确实记录了这个位置,如果你想查看这个值所在的内存地址,你只需要用&即可访问。
由此可知,数据类型存在的意义是给变量分配合适的内存空间。
面向对象编程的本质是设计并扩展自己的数据类型,设计自己的数据类型就是让类型与数据匹配。如果正确做到了这一点,以后使用自己的数据类型会方便很多。然而,在创建自己的类型之前,必须先了解一些C++内置的基本类型:如整数、浮点数。但是C++提供了多种变体,包括数组、字符串、指针和结构体等。
2.2 整型
作用:整型变量表示的是整数类型
的数据
C++中能够表示整型的类型由以下几种方式,区别在于所占内存空间不同:
数据类型 | 占用字节 | 取值范围 |
---|---|---|
short(短整型) | 2 | (-2^15 ~ 2^15-1) |
int(整型) | 4 | (-2^31 ~ 2^31-1) |
long(长整型) | window为4,linux为4(32位),8(64位) | (-2^31 ~ 2^31-1) |
long long(长长整型) | 8 | (-2^63 ~ 2^63-1) |
我们需要谈谈位和字节的知识。
计算机内存由一些叫位的单元组成,C++中的这些整型都通过使用不同数目的位来存储值。如果我们用位来衡量上面的数据类型,那么:
数据类型 | 占用位 |
---|---|
short | 至少16位 |
int | 至少和short一样长 |
long | 至少32位 |
long long | 至少64位 |
前面说到的位(Bit)可以当做电子开关,可以开可以关,关表示0,开表示1;比如8位的内存,1位就能0和1,那么8位就是 2 8 2^8 28即256。所以8位的单元可以理解为0 ~ 255或者-128 ~ 127,按刚才的理解的话,每增加一位,组合数翻倍。
字节(byte)通常指的是8位的内存单元。从这个意义来说,字节指的是描述计算机内存量的度量单位,1KB等于1024字节,1MB等于1024KB。
示例:
#include <iostream>
using namespace std;
int main()
{
//1、短整型
short num1 = 10;
cout << sizeof(num1) << endl;
//2、整型
int num2 = 10;
cout << sizeof(num2) << endl;
//3、长整型
long num3 = 10;
cout << sizeof(num3) << endl;
//4、长长整型
long long num4 = 10;
cout << sizeof(num4) << endl;
system("pause");
return 0;
}
2.3 sizeof关键字
作用:利用sizeof关键字可以统计数据类型所占内存大小
语法:sizeof(数据类型/变量)
示例:
#include <iostream>
using namespace std;
int main()
{
//1、短整型
short num1 = 10;
cout << sizeof(num1) << endl;
//2、整型
int num2 = 10;
cout << sizeof(num2) << endl;
//3、长整型
long num3 = 10;
cout << sizeof(num3) << endl;
//4、长长整型
long long num4 = 10;
cout << sizeof(num4) << endl;
system("pause");
return 0;
}
2.4 实型(浮点型)
作用:用于表示小数
浮点型变量分为两种:
-
单精度float
-
双精度double
两者的区别在于表示的有效数字范围不同。
数据类型 | 占用字节 | 有效数字范围 |
---|---|---|
float | 4 | 7位有效数字 |
double | 8 | 15-16位有效数字 |
实例:
#include <iostream>
using namespace std;
int main()
{
//1、单精度 float
//2、双精度 double
float f1 = 3.14f;
cout << "f1 = " << f1 << endl;
double d1 = 3.14;
cout << "d1 = " << d1 << endl;
cout << "float sizeof = " << sizeof(f1) << endl;
cout << "double sizeof = " << sizeof(d1) << endl;
//科学计数法
float f2 = 3e2;//3*10^2
cout << "f2 = " << f2 << endl;
float f3 = 3e-2;//3*0.1^2
cout << "f3 = " << f3 << endl;
system("pause");
return 0;
}
2.5 字符型
作用:字符型变量用于显示单个字符
语法:char ch = 'a'
【注1:在显示字符型变量时,用单引号将字符括起来,不要用双引号】
【注2:单引号内只能有一个字符,不可以是字符串】
- C和C++中字符型变量只占用一个字节
- 字符型变量并不是把字符本身放到内存中存储,而是将对应的ASCII编码放入存储单元。
实例:
#include <iostream>
using namespace std;
int main()
{
//1、字符型变量创建方式
char ch = 'a';
cout << ch << endl;
//2、字符型变量所占内存大小
cout << "char ch sizeof = " << sizeof(ch) << endl;
//3、字符型变量常见错误
//char ch2 = "b";//创建字符型变量的时候,要用单引号
//char ch2 = 'abcdef'; //创建字符型变量的时候,单引号内只能有一个字符
//4、字符型变量对应ASCll编码
//a - 97
cout << (int)ch << endl;
system("pause");
return 0;
}
2.6 转义字符
作用:用于表示一些不能显示出来的ASCII的字符
2.7 布尔类型
作用:布尔数据类型代表真或假的值
bool类型只有两种值:
- true:真(本质是1)
- false:假(本质是0)
bool类型占一个字节大小
示例:
#include <iostream>
using namespace std;
int main()
{
//1、创建bool数据类型
bool flag = true;//true代表真
cout << flag << endl;
flag = false;//false代表假
cout << flag << endl;
//本质上1代表真,0代表假
cout << "size of bool = " << sizeof(bool) << endl;
system("pause");
return 0;
}
2.8 数据的输入
作用:用于从键盘获取数据
关键字:cin
语法:cin>>变量
示例:
#include <iostream>
#include <string>
using namespace std;
int main()
{
//1、整型
int a = 0;
cout << "请给整型变量a赋值:" << endl;
cin >> a;
cout << "整型变量a = " << a << endl;
//2、浮点型
float f = 3.14f;
cout << "请给浮点型变量赋值:" << endl;
cin >> f;
cout << "浮点型变量f = " << f << endl;
//3、字符型
char ch = 'a';
cout << "请给字符型变量ch赋值:" << endl;
cin >> ch;
cout << "字符型变量f = " << ch << endl;
//4、字符串型
string str = "hello world";
cout << "请给字符串str赋值:" << endl;
cin >> str;
cout << "字符串str" << str << endl;
//5、布尔类型
bool flag = false;
cout << "请给布尔类型flag赋值" << flag << endl;
cin >> flag;
cout << "布尔类型flag = " << flag << endl;
//只要非零的数都是真
system("pause");
return 0;
}
2.9 新特性
初始化
在以前学过的任何编程语言中,我们初始化一个变量都是采用如下方式:
int a = 10;
但是在C++11中,我们有另外一种初始化方式,这种方式多用于数组或结构体,但是在C++98中,也可用于单值变量,如下:
int a = {10};
将大括号初始化器用于单值变量的情况不多,但是C++11标准使得这种情况变多了。首先如果采用上面的方式初始化的话,我们可以不使用等号:
int a{10};
其次,大括号内甚至可以不放东西,这样会初始化为0。