目录
一.数据类型
1.字符型
2.整型
3.浮点型
4.布尔类型
5. signed 和 unsigned
引言
数据类型是 C++ 编程的基石,也是初学者接触这门语言时最先需要掌握的核心概念之一。本文将从零开始,系统介绍 C++ 中的基本数据类型,包括字符型(char)、整型(int)、浮点型(float、double)、布尔类型(bool)以及 signed 和 unsigned 修饰符。理解这些类型,不仅有助于我们正确声明变量、合理分配内存,更能帮助我们写出健壮、高效的代码,为后续学习变量、常量、运算符乃至面向对象编程打下坚实基础。
在阅读本文时,建议按照章节顺序循序渐进:先了解每种类型的基本含义和用法,再通过代码示例加深理解,最后结合数据类型的长度和取值范围,体会不同类型在实际开发中的适用场景。希望本文能帮助你建立起对 C++ 数据类型清晰而完整的认识。
一.数据类型
数据类型,顾名思义就是数据的类型。C++ 中提供了丰富的数据类型来描述生活中各种各样的数据,比如:可以使用整型来描述整数,使用浮点型描述小数,使用字符型来描述字符。
所谓类型,就是具有相似的共同特征,编译器只有知道了数据的类型,才知道怎么操作数据。
1.字符型
char// character 的缩写
在键盘上可以敲出各种字符,如:a,q,@,# 等,这些符号都被称为字符,字符是用单引号括起来的,如:'b','@'。为了能说明这些字符,给他们抽象出一种类型,就是字符型 char。
ASCII 编码我们知道在计算机中所有的数据都是以二进制的形式存储的,那这些字符在内存中分别以什么样的二进制存储的呢?如果我们每个人自己给这些字符中的每个字符编一个二进制序列,这个叫做编码,为了方便大家相互通信,不造成混乱,后来美国国家标准学会(ANSI)出台了一个标准 ASCII 编码,C 语言中的字符就遵循了 ASCII 编码的方式。
• ASCII 码值从 0~31 这 32 个字符是不可打印字符,无法打印在屏幕上观察。
• 字符 A~Z 的 ASCII 码值从 65~90。
• 字符 a~z 的 ASCII 码值从 97~122。
• 对应的大小写字符(a 和 A)的 ASCII 码值的差值是 32。
• 数字字符 0~9 的 ASCII 码值从 48~57。
• 换行 \n 的 ASCII 值是:10。
• ASCII 码值从 0~31 这 32 个字符是不可打印字符,无法打印在屏幕上观察。
2.整型
整型类型是对所有整数的抽象,为了能对整数形成统⼀的类型标识,就有整型;在 C 和 C++ 中整型被分为四⼤类:
1 short [int]// 短整型
2 int// 整型
3 long [int]// 长整型
4 long long [int]// 更长的整型
3.浮点型
浮点型是对所有实数(⼩数)的抽象,为了能对实数进⾏统⼀的类型标识,就有了浮点型。浮点型有三种:
1 float//单精度浮点型
2 double//双精度浮点型
3 long double//更长的双精度浮点型
4.布尔类型
C++ 有⼀种类型叫:bool(布尔类型),布尔类型的变量的值可以是 false,这种类型的变量专⻔⽤来表⽰真或假的。当然在 C 和 C++ 中,0 表⽰假,⾮ 0 表⽰真,有时候不使⽤ true 或 bool 类型也能表达相同的逻辑。
bool5. signed 和 unsigned
signed 和 unsigned 关键字修饰字符型和整型类型。
signed 关键字,表⽰⼀个类型带有正负号,包含负值;⽐如:温度、银⾏存款。
unsigned 关键字,表⽰该类型不带有正负号,只能表⽰零和正整数,⽐如:年龄。
有了 signed 和 unsigned 的修饰,字符和整型类型其实更加丰富,可以有以下这些:
对于 int 默认是有正负号的,也就是说 int 等于 signed int。
int 类型也可以不带正负号,只表⽰⾮负整数。这时就必须使⽤关键字 unsigned 声明变量。
变量声明为 unsigned 的好处是,同样⻓度的内存能够表⽰的最⼤整数值,增⼤了⼀倍。⽐如,16 位的 signed short int 的取值范围是:-32768~32767,最⼤是 32767;而 unsigned short int 的取值范围是:0~65535,最⼤值增⼤到了 65535。
unsigned int ⾥⾯的 // 有符号整型的最⼤值 int 可以省略,所以上⾯的变量声明也可以写成下⾯这样。
字符类型 char 也可以设置 signed 和 unsigned。
注意,char 类型到底是 signed char 还是 unsigned char,由编译器决定。大部分的编译器上 char 就是 signed char。这就是说,char 不等同于 unsigned char,它有可能是signed char,也有可能是unsigned char。这⼀点与 int 不同,int 就是等同于 signed int。
6.数据类型的长度
每种数据类型都有对应的长度,使用不同的数据类型能够创建出长度不同的变量,变量长度的不同,储存的数据范围就有所差异。
6.1 sizeof操作符
sizeof是一个关键字,也是一个操作符,专门用来计算不同数据类型的长度,单位是字节。
sizeof的操作数可以是类型,也可以是变量名或表达式,sizeof的操作数如果不是类型,而是表达式的时候,可以省略后面的括号。
sizeof (类型) sizeof 表达式6.2计算各数据类型的长度
该如何理解这些数据类型的长度呢?其实我们使用这些数据类型可以向内存申请空间(就是创建变 量),不同的数据类型⼀次性申请的空间大小是有差异的。你可以这样理解:
7.各类型的取值范围
前面我们了解到了各类型变量的长度之间有所差异,这个差异又决定了这种变量能存储的值的大小。
其实每种数据类型都有自己的取值范围,也就是存储的数值的最大值和最小值的区间,下面是不同数据类型的取值范围。
8.typedef
在C++中有一个关键字是用来给类型从命名的。当有一个类型名字比较复杂,就可以重新命名简化。使用方式如下:
typedef 旧类型名 新类型名;例如:
typedef unsigned int uint; typedef unsigned long ulong; typedef unsigned long long ull;二.变量和常量
1.变量的创建
了解了数据类型,我们使用类型做什么呢?
类型是用来创建变量的。什么是变量呢?可以变化的值就是变量,不变的是就是常量。
变量创建的语法形式是这样的:
date_type name; | | | | 数据类型 变量名int age; //整型变量 char ch; //字符变量 double weight; //浮点型变量变量的命名规则:
- 变量名只能由字母、数字和下划线组成,且必须以字母或下划线开头。
- 变量名不能以纯数字开头,也不能包含特殊字符。
- 变量名不能使用关键字,如int, char, if等。
- 变量名应具有意义,有助于理解变量的用途和含义。
- 变量名应简单明了,避免过长。
- 变量名要区分大小写,例如myvariable和myVariable被视为两个不同的变量。
2.变量的初始化
在变量创建时给一个值,就是初始化。
int age = 10; char ah = 'a'; double PI = 3.14;3.变量的分类
全局变量:在大括号外部定义的变量,使用范围更广。
局部变量:在大括号内部定义的变量,使用范围比较局限,只能在自己的局部范围内使用。
当全局变量和局部变量同名时,优先使用局部变量。
- 全局变量:全局变量通常在定义时就被初始化,如果没有明确指定初始值,它们通常会被初始化为0。
- 局部变量:局部变量通常不会自动初始化。它们需要在使用之前明确地赋值或初始化。如果没有初始化,它们的值将是未定义的,使用未初始化的局部变量可能会导致不可预测的行为或运行时错误,因此局部变量建议初始化。
4.常量
常量就是不能改变的值,通常我们会用到三种常量:
- 字面常量
- #define 定义的常量
- const 定义的常量
4.1字面常量
整型常量:100,512,0x123
字符常量:'a'
浮点型常量:3.14,1E6
4.2 #define定义的常量
有时候也会用#define来定义常量,比如:
#define 常量名 内容#include <iostream> using namespace std; #define M 100; #define CH 'a'; #define PI 3.14; int main(){ cout << M << endl; cout << CH << endl; cout << PI << endl; return 0; }上述的M,CH,PI都是常量,使用#define定义常量时不关注类型,只关注常量的名字和值。
4.3 const定义常量
C++中还可以用const来定义常量,这种常量会有具体的类型。语法如下:
const 常量类型 常量名 = 常量值; const int PI = 3.14;习惯上,我们把常量的名字一般会写成大写,而普通变量的名字不会全大写,这样就可以做一个区分。