文章目录
- 1. 概述
- 1.1 数据类型的重要作用 (了解)
- 2. 数据类型
- 2.1 什么是进制 ?
- 2.1.1 存储单位
- 2.2 整数类型
- 2.2.1 整数类型使用
- 2.2.2 超出范围
- 2.2.3 关键字 sizeof
- 2.3 实型(浮点型)
- 2.3.1 setprecision()函数
- 2.3.2 科学计数 (了解即可)
- 2.4 字符型
- 2.4.1 字符型定义
- 2.4.2 ASCII (了解即可)
- 2.5 转义字符(理解即可)
- 2.6 字符串类型
- 2.6.1 字符串定义方式
- 2.7 布尔类型
- 2.7.1 布尔类型定义
- 2.8 数据类型转换(重要)
- 2.8.1 隐式类型转换
- 2.8.2 强制类型转换
- 2.9 综合练习
- 2.9.1 互换变量
- 2.9.2 计算阴影部分
- 2.9.3 ASCII编码转换
1. 概述
- 在C++中,数据类型指定了变量或表达式可以存储的数据的类型和范围。
- 规定在创建一个常亮或者变量时,必须指定一个数据类型,否则 内存无法给变量分配内存 。
- 它定义了 变量在内存中所占空间的大小。
- 数据类型决定了,如何解释内存中的数据,以及可以对数据执行的操作。
- 根据类型进行操作,例如:字符串不能和整数进行运算。
1.1 数据类型的重要作用 (了解)
-
数据类型的存在是为了确保在程序中正确地存储和处理数据。下面是一些数据类型的重要作用:
-
内存管理: 数据类型确定了变量在内存中所占用的空间大小。 这样,编译器可以为每个变量分配适当的内存空间。使用正确的数据类型,可以避免内存浪费和溢出的问题。
-
运算操作: 不同的数据类型支持不同的操作。例如,可以对整数类型进行加减乘除运算,而字符类型只支持字符比较、连接等操作。 数据类型确定了程序可以对变量进行的操作集。
-
代码可读性和维护性: 数据类型提供了对变量类型的描述,使得代码更易读和易于维护。通过阅读代码,开发人员可以了解变量的含义和用途,提高代码的可理解性和可维护性。
-
-
总结:数据类型的存在是为了确保数据在程序中正确、有效、高效地存储和操作。
- 通过适当选择和使用数据类型,可以提高程序的性能、可靠性和可维护性。
2. 数据类型
2.1 什么是进制 ?
- 进制是一种表示数字的方式,它使用一定的符号系统来表示数值中的各个位数。
- 在日常生活中,我们通常使用的是十进制(即以10为基数的系统), 但在计算机科学和数学领域中,还存在其他进制系统。
- 例如: 在二进制中,基数为2,因为我们只使用 两个数字(0和1)来表示数值。
- 在C++中,常见的进制包括十进制(base 10)、二进制(base 2)、八进制(base 8)和十六进制(base 16)。
- 十进制: 使用十个数字(0-9)来表示数值。例如,整数10表示十进制数。
- 二进制: 使用两个数字(0和1)表示数值。二进制数值通常以0b或0B前缀开头。例如,整数0b1010表示二进制数。
- 八进制: 使用八个数字(0-7)表示数值。八进制数值通常以0前缀开头。例如,整数012表示八进制数。
- 十六进制: 使用十六个数字(0-9和A-F或a-f)表示数值。十六进制数值通常以0x或0X前缀开头。例如,整数0xA表示十六进制数。
2.1.1 存储单位
-
计算机中所有数据都是以 二进制进行存储 的,
- bit(比特/位): 一位 二进制,用0和1来表示。
- byte(字节): 8 位二进制构成一个字节 , 即,1byte=8bit。
-
在C++中定义变量前一定要声明数据类型, 每种数据类型都有自己的占的字节。
- 不同的数据类型在C++中有不同的长度。(以字节为单位,具体长度可能因编译器和系统而有所差异):
2.2 整数类型
- 整型变量,表示 整数类型 的数据。
- C++中能表示整数类型的变量有以下几种
- 区别: 在于所 占内存空间不同。
数据类型 | 占用空间 | 取值范围 |
---|---|---|
short(短整型) | 2字节 | -2^15 ~ 2^15-1 |
int(整型) | 4字节 | -2^31 ~ 2^31-1 |
long(长整型) | 8字节(64位),4字节(32位) | -2^31 ~ 2^31-1 |
long long(长长整型) | 8字节 | -2^63 ~ 2^63-1 |
2.2.1 整数类型使用
-
如何整数类型的使用。
#include <iostream> using namespace std; int main(){ //1.整数类型使用 short int long long long short num_1 = 4; //定义int类型 int num_2 =4; //定义长整型 long num_3 =4; //定义长长整型 long long num_4 =4; cout << num_1 <<endl; cout << num_2 <<endl; cout << num_3 <<endl; cout << num_4 <<endl; return 0; }
2.2.2 超出范围
- 思考;如果超出范围会怎么样 ?
- 例如 ;
short
超出范围会怎样?
#include <iostream> using namespace std; int main(){ //整数类型 范围 -2**15 ~2**15-1 // -32768 ~32767 short a = 32768 ; short a1 = -32769 ; //结果输出了什么? 发生了什么变化? cout<< a << endl; //-32768 cout<< a1 << endl; //32767 return 0; }
- 例如 ;
2.2.3 关键字 sizeof
- 数据类型的大小都需要记住么?并不是 要学会使用运算符sizeof。
- 统计数据类型占的内存大小 。
- sizeof(数据类型 / 变量名)
//sizeof()就是统计数据类型占的内存大小 #include <iostream> using namespace std; int main(){ short a1 = 10; int a2 = 10; long a3 = 10; long long a4 = 10; cout << sizeof(a1) << endl; //2 cout << sizeof(a2) << endl; //4 cout << sizeof(a3) << endl; //4 cout << sizeof(a4) << endl; //8 return 0; }
2.3 实型(浮点型)
- 作用:表示小数,又叫做 小数类型, 有 两种 表示方式:
float
单精度。double
双精度。
数据类型 | 占用空间 | 有效数字范围 |
---|---|---|
float | 4字节 | 有效 7位 |
double | 8字节 | 有效位数15~16 |
-
如何使用
- 单精度浮点型,值后面需要加
f
#include <iostream> using namespace std; int main(){ //实数类型 float double float f = 3.1415926f; double d = 3.1415926 ; cout<< f << endl; //默认显示6位 3.14159 cout<< d << endl; //3.14159 return 0; }
- 单精度浮点型,值后面需要加
2.3.1 setprecision()函数
-
查看保留小数位数的方法。
- 注意;需要头文件
#include <iomanip>
#include <iostream> #include <iomanip> //包含setprecision()文件 using namespace std; int main(){ // cout<<setprecision(4)<<endl; //也可以在开始时设置。 //1.查看浮点型占用大小,关键字sizeof float f =3.141592653f; double d = 3.141592653; //查看大小 cout <<sizeof(f)<<endl; //4 cout <<sizeof(d)<<endl; //8 //设置输出浮点数的精度. cout <<setprecision(8) << f << endl; cout <<setprecision(8) << d << endl; return 0; }
- 注意;需要头文件
2.3.2 科学计数 (了解即可)
- 浮点型除了用小数表示,还有用 科学计数法表示。
- 通常e后面如果是正数, 就是10基础;
- 如果e后面是负数,就是 0.1为基数;
#include <iostream> using namespace std; int main(){ //科学计数法2种表示方式 //1. 3e3 1.2e4 double d = 3e3 ;// 3*10**3 double d2 = 1.2e4; //1.2 *10**4 cout << d << endl; cout << d2 << endl; //2. 3e-3 1.2e-4 double d3 =3e-3; //3*0.1**3 double d4 =1.2e-4; // 1.2*0.1**4 cout <<d3<<endl; //0.003 cout <<d4<<endl; //0.00012 return 0; }
2.4 字符型
2.4.1 字符型定义
-
字符型变量用于 显示单个字符,语法格式如下:
- 注意,要求 使用单引号
' '
围起来的单个字符。 char c = 'a';
只能是单引号
#include <iostream> using namespace std; int main(){ //字符的定义方式 char a ='a'; cout<<a<<endl; cout<<sizeof(a)<<endl; // 1个字节 //2. 错误示范 // char a ="a"; //必须使用单引号 // char a ='ab'; //只能是单个字符 // char a ='你'; //存不了一个汉字 return 0; }
- 注意,要求 使用单引号
-
取值范围
数据类型 占用空间 最多表示的符号数 取值范围 char 1字节 256个不同值 (ASCII) -128 ~127 的整数值
2.4.2 ASCII (了解即可)
-
ASCII是一种字符编码标准,它定义了将字符映射到整数值的规则。
- 在C++中,每个字符都有一个对应的ASCII码值。
-
ASCII(美国标准信息交换码)是一种用于计算机文本编码的字符集。它利用7位二进制数字(0到127)来 表示128个不同的字符。
- 这些字符包括 大写和小写字母、数字、标点符号、特殊控制字符等。
- 注意:0~31犹豫特殊是不输出的。 需要从32开始。
-
在C++中,我们可以使用char类型来表示ASCII字符。 char类型是一个字节大小的整数类型,可以存储ASCII码值。
- 我们可以使用单引号将字符字面值括起来, 如 ‘A’ 表示大写字母A的ASCII码值。
- 我们还可以使用整数赋值给char类型变量,其中整数值应处于ASCII码值的范围内。
#include<iostream> using namespace std; int main(){ char a ='a'; char a1 = 97; //为什输出都是 a ? ASCII 字符码表对应 cout << a << endl; cout << a1 << endl; int i = a+a1; //可以进行数字运算. 需要转换int类型. cout << i ; // 194 //查看所有的字符串 匹配ascii表 for (int i=32 ; i< 127;i++){ cout << "i对应的字符 "<<i <<" "<<char(i) << endl; } return 0; }
2.5 转义字符(理解即可)
-
转义字符是一种在编程语言中使用的特殊字符序列,用来表示一些特殊的字符或者字符组合。它们被用于告诉编译器或解释器将它们后面的字符当作普通字符处理,而不是它们通常具有的特殊含义。
- 使用转义字符 可以在 字符串和字符字面值中插入特殊字符或字符序列。
//还有很多, 但是掌握这些就可以。 \n:换行符,将当前位置移到下一行的开头。 \t:制表符,用于在文本中插入水平制表符。 \\:反斜杠字符,用于插入一个反斜杠字符。 \':单引号字符,用于插入一个单引号字符。 \":双引号字符,用于插入一个双引号字符。 \b:退格符,用于删除前一个字符。
- 例如,在C++中,你可以使用
\n
来表示换行符,或者使用\t
来表示制表符。
#include <iostream> using namespace std; int main(){ /*1. \n 换行 \t 制表符 \' 插入单引号 \" 插入双引号 \b 退格符 */ cout << "H\be\"llo \n C++, Hel\tlo Wor\'ld!"<<endl; cout << "Hello,World"<< endl; return 0; }
2.6 字符串类型
2.6.1 字符串定义方式
- 作用就是表示一串字符串,定义方式两种;
- 字符数组 形式
char str[] = " 变量值 "
; - 字符串 定义;
string s = "变量值"
;
- 字符数组 形式
- 注意的是在变量值赋值时,一定要使用双引号
" "
- 字符串定义 需要使用,头文件
#include <string>
。
#include<iostream> //头文件扩展 using namespace std; //命名空间 ,如果不写就需要调用 #include <string> //导入头文件string int main(){ //需要执行方法体 cout<<"Hello C++"<<endl; //endl相当于回车 cout<< "Hello World"; //遇见程序结束返回值. string s ="hello"; cout << s <<endl; return 0; }
- 字符串定义 需要使用,头文件
2.7 布尔类型
2.7.1 布尔类型定义
-
布尔类型就是,专门表示真假的类型。
数据类型 占用空间 取值 bool 1字节 true(1) 和 false(0) -
布尔类型有两个值,除了0代表假,其他都为真。
true
真。false
假。
#include <iostream>
using namespace std;
int main(){
//1.创建小数
bool b = true;
bool b1 = false;
// true 本质 是 1 false 本质为 0
cout << b <<endl; // 1
cout << b1 <<endl; // 0
//2.查看占用空间 1个字节
cout << sizeof(b)<<endl;
cout << sizeof(b1)<<endl;
cout << "-------------------"<< endl;
//3. 扩展 除了0代表假,其他都是真
bool num_1 = 0;
bool num_2 = 1.5;
bool num_3 = 3.8;
bool num_4 = -3.8;
cout << num_1 <<endl; // 0
cout << num_2 <<endl; //1
cout << num_3 <<endl; //1
cout << num_4 <<endl; //1
return 0;
}
2.8 数据类型转换(重要)
- 定义变量时,需要根据需求来选择合适的数据进行存储,但是在某些情况下,需要将一种数据类型转换为另一种数据类型使用。
- 这时就需要数据类型转换。
- 这时就需要数据类型转换。
2.8.1 隐式类型转换
-
隐式转换是指,在一些情况下,编译器会自动将一种类型的值转换为另一种类型的值,而无需显式地指定转换操作。
- 需要按照从上往下的规则进行转换。
#include <iostream> using namespace std; int main(){ /* 1.隐式类型转换 //char --> int -->long-->float-->double */ //1.1 char --> int char c ='a'; int i = 67 ; //表达式有int时 就会char类型就会自动提升为 int类型 int res = c + i; //a就自动转换为 97 + i 就是 67 cout << res << endl; //164 //1.2 int -->double int i_1 = 2; double d = 9.0; double res_1 = d / i_1; cout << res_1 << endl; //4.5 //1.3 int 和 int int i_2 = 5 ; cout << i_2/i_1<< endl; //2 因为都是int 不保留小数 return 0 ; }
- 需要按照从上往下的规则进行转换。
2.8.2 强制类型转换
-
隐式类型是小转大方向,但是如果要 从大类型转换到小类型 呢?
- 就需要 强制类型转换。
-
强制类型换行有两种书写方式
- (数据类型)变量。
- 数据类型(变量或者表达式)。
#include <iostream> using namespace std; int main(){ /*1.显示类型转换, 从大类型转换为小类型 就是强制转换. */ //float --> int float f = 3.14; cout <<"float-->int: " <<int(f+1) <<endl; //3 //int --> char int a = 65; //0~127 从33开始.. cout << "int --> char "<<char(a) << endl; //A }
2.9 综合练习
2.9.1 互换变量
-
需求在,控制台输入两个值,分别是 a,b ,输出的时候要求 输出b,a。
-
代码如下;
#include <iostream> using namespace std; /* 1. 需求,在控制台输入2个数 a ,b 输出需要编程 b , a 交换变量. */ int main(){ //1.控制台输入 cout << "请输入 a: " << endl; cout << "请输入 b: " << endl; //1.1 定义a 的值 int a ; //先声明 a int b ; //先声明 b cin >> a ; //不需要添加>>endl(输出流换行); cin >> b ; //交换变量 int c ; c = a; a = b ; b = c; cout << "a的值是: "<< a << endl; //使用 cout << "b的值是: "<< b << endl; //使用 return 0; }
2.9.2 计算阴影部分
-
输入一个正方形边长为 r , 计算阴影部分的面积 (如图所示),π的取值为 3.1415,要求结果 保留3位有效数 ,当正方形 边长为 5.5 时, 求阴影面积。
- 圆的 面积怎么求 ?
- 阴影面积如何推导?
#include <iostream> using namespace std; #include <iomanip> //导入精度输出头文件 /* 1. 阴影部分的面积; 正方形面积 - 4分之一圆的面积. */ int main(){ //1.正方形面积 r^2 ,圆的面积 π*r^2 const double pai = 3.1415 ; //π double r = 5.5; //既是圆的半径,又是长方形的边长 double s; //阴影部分面积 s = r*r - pai*r*r/4; //保留2位小数 注意需要导入头文件 cout << "阴影部分面积s: " << setprecision(3)<< s << endl; return 0 ; }
2.9.3 ASCII编码转换
-
要求是输入一个字符请你输出这个字符对应的ASCII的编码是多少?
- 输入一个字符 a , 输出为 97。
- 输入一个字符 A ,输出为 65。
#include <iostream> using namespace std; int main(){ cout<< "请输入字符: "<< endl; char c ; cin >> c; //转出时对应的应该是10进制 int类型 cout << int(c) <<endl; return 0; }
-
自己思考,假如需求调转过来。
- 输入一个数字 97 , 输出为 a。
- 输入一个数字 65,输出为 A。
#include <iostream> using namespace std; int main(){ //1.输入数字类型 int cout << "请输入一个数字: "<< endl; int a ; cin >> a; //2. 转换为char类型 cout << char(a)<< endl; return 0; }