C++入门详解2:数据类型、运算符与表达式

目录

引言

一、C++数据类型体系

[1.1 基本数据类型](#1.1 基本数据类型)

[1.2 非基本数据类型](#1.2 非基本数据类型)

二、常量与变量

[2.1 常量](#2.1 常量)

[2.2 变量](#2.2 变量)

[2.2.1 变量定义规则](#2.2.1 变量定义规则)

[2.2.3 变量赋初值](#2.2.3 变量赋初值)

三、整型数据

[3.1 整型常量的表示形式](#3.1 整型常量的表示形式)

[3.2 整型变量分类](#3.2 整型变量分类)

[3.2.1 关键特性](#3.2.1 关键特性)

四、浮点型数据

[4.1 浮点型常量表示](#4.1 浮点型常量表示)

[4.2 浮点型变量特性](#4.2 浮点型变量特性)

五、字符型数据

[5.1 字符常量](#5.1 字符常量)

[5.2 字符变量与字符串常量](#5.2 字符变量与字符串常量)

六、运算符与表达式

[6.1 算术运算符](#6.1 算术运算符)

[6.2 强制类型转换](#6.2 强制类型转换)

[6.3 自增自减运算符](#6.3 自增自减运算符)

[6.4 逗号运算符](#6.4 逗号运算符)

[6.5 混合运算类型转换](#6.5 混合运算类型转换)

七、总结


引言

C++作为一门静态类型语言,数据类型、运算符与表达式是构建程序的基础框架。掌握数据的描述规则(数据类型)和操作规则(运算符与表达式),是写出高效、无错代码的前提。本文基于C++第二章核心知识点,系统梳理数据类型分类、常量与变量定义、各类数据特性及运算符使用技巧,结合实例代码助你快速入门。

一、C++数据类型体系

C++的数据类型分为基本数据类型非基本数据类型,构成了程序中数据存储的基础模型:

1.1 基本数据类型

核心用于存储简单数据,包括:

  • 整型:int(基本整型)、short(短整型)、long(长整型)

  • 字符型:char(普通字符型)、unsigned char(无符号字符型)

  • 实型(浮点型):float(单精度)、double(双精度)、long double(长双精度)

  • 布尔型:bool(取值true/false

  • 无值型:void(多用于函数返回值)

1.2 非基本数据类型

由基本类型组合或扩展而来,包括:

  • 数组:type[](如int arr[5]

  • 指针:type*(如char* p

  • 引用:type&(如int& ref = a

  • 类与结构体:classstruct

  • 联合:union

  • 枚举:enum

二、常量与变量

2.1 常量

程序运行中值不可改变的量,分为两类:

  • 字面常量 :直接书写的常量值,如整型100、实型3.14、字符型'a'、字符串"hello"

  • 符号常量 :用标识符替代常量,通过#define定义,格式:#define 标识符 常量

示例代码:符号常量的使用

cpp 复制代码
#include <iostream>
using namespace std;

#define PRICE 30  // 定义符号常量PRICE代表30

int main() {
    int num = 10, total;
    total = num * PRICE;  // 等价于10*30
    cout << "total=" << total << endl;  // 运行结果:total=300
    // PRICE=40; 错误:符号常量不能赋值修改
    return 0;
}

2.2 变量

程序运行中值可改变的量,本质是内存中的存储单元,通过标识符(变量名)访问。

2.2.1 变量定义规则

  • 格式:类型符 标识符(如int a; char c; float x;

  • 命名规范:仅由字母、数字、下划线组成,首字符必须是字母或下划线(如sum_totalstudent_name合法;M.D.John3D64非法)

  • 注意事项:区分大小写(Aa是不同变量),建议"见名知意",需先定义后使用

2.2.3 变量赋初值

支持定义时直接初始化,示例:

cpp 复制代码
int a = 3;          // 整型变量a初值3
float f = 3.56;     // 浮点型变量f初值3.56
char c = 'a';       // 字符变量c初值'a'
int x, y, z = 5;    // 仅z初始化,x、y未初始化
int m = 3, n = 3;   // m、n初值均为3(不可写int m=n=3;)

三、整型数据

3.1 整型常量的表示形式

  • 十进制:直接书写(如123-456

  • 八进制:以0开头(如0123等价于十进制83

  • 十六进制:以0x开头(如0x123等价于十进制291

3.2 整型变量分类

按符号和长度分为6类(Visual C++ 6.0环境):

类型 字节数 数值范围
[signed] int 4 -2147483648~2147483647
unsigned int 4 0~4294967295
[signed] short [int] 2 -32768~32767
unsigned short [int] 2 0~65535
[signed] long [int] 4 -2147483648~2147483647
unsigned long [int] 4 0~4294967295

3.2.1 关键特性

  • 内存中以补码存储,有符号变量最高位为符号位(0正1负)

  • 可能发生溢出 :超出范围时数值循环(如短整型32767+1=-32768

示例代码:整型溢出

cpp 复制代码
#include <iostream>
using namespace std;

int main() {
    short a = 32767;  // 短整型最大值
    short b = a + 1;  // 溢出
    cout << a << "," << b << endl;  // 运行结果:32767,-32768
    return 0;
}

四、浮点型数据

用于存储小数或大范围整数,分为单精度(float)、双精度(double)、长双精度(long double)。

4.1 浮点型常量表示

  • 小数形式:如0.1233.14

  • 指数形式:如3e-3(等价于0.003),要求e前后必须有数字,指数为整数

  • 规范化指数形式:e前的小数部分需保留1位非零数字(如1.23456e2

4.2 浮点型变量特性

  • float:4字节,7位有效数字,范围3.4e-38~3.4e+38

  • double:8字节,15~16位有效数字,范围1.7e-308~1.7e+308(默认浮点型常量为double

  • 存在舍入误差:超出有效数字的部分会被舍弃

示例代码:浮点型舍入误差

cpp 复制代码
#include <iostream>
using namespace std;

int main() {
    float a = 123456.789e5;
    float b = a + 20;
    cout << "a=" << a << ", b=" << b << endl;  // 运行结果:a=12345678848.000000, b=12345678868.000000
    return 0;
}

五、字符型数据

5.1 字符常量

  • 普通字符:单引号包裹(如'a''*'

  • 转义字符:以\开头,表示特殊功能(如\n换行、\t制表位、\101八进制ASCII码对应'A'

示例代码:转义字符使用

cpp 复制代码
#include <iostream>
using namespace std;

int main() {
    cout << " ab c\t de\rf\tg\n";  // \t制表位、\r回车、\n换行
    cout << "h\ti\b\bj k";         // \b退格
    return 0;
}
// 运行结果:
// f ab c gde
// h j k

5.2 字符变量与字符串常量

  • 字符变量:char类型,占1字节,存储字符的ASCII码,可与整型互通

  • 字符串常量:双引号包裹(如"abc"),末尾隐含\0作为结束标志("a"占2字节,'a'占1字节)

示例代码:字符与整型互通

cpp 复制代码
#include <iostream>
using namespace std;

int main() {
    int a = 'A';    // 'A'的ASCII码为65
    char b = 32;    // 32是空格的ASCII码
    char c = a + b; // 65+32=97,对应'a'
    cout << (int)c << endl;  // 输出97(整型形式)
    cout << c << endl;       // 输出'a'(字符形式)
    return 0;
}

六、运算符与表达式

6.1 算术运算符

  • 基本运算符:+(加)、-(减)、*(乘)、/(除)、%(取余)

  • 注意:整数除法舍弃小数(5/3=1),%仅支持整型(符号由被除数决定,如-7%4=-3

6.2 强制类型转换

格式:(目标类型)表达式,仅临时转换值,不改变原变量类型

示例代码:强制类型转换

cpp 复制代码
#include <iostream>
using namespace std;

int main() {
    float x = 3.6;
    int i = (int)x;  // 临时转换x的值为3,x本身仍为3.6
    cout << "x=" << x << ", i=" << i << endl;  // 运行结果:x=3.6, i=3
    return 0;
}

6.3 自增自减运算符

  • ++i/--i:先增减1,再使用值

  • i++/i--:先使用值,再增减1

示例代码:自增运算符区别

cpp 复制代码
#include <iostream>
using namespace std;

int main() {
    int i = 0, j;
    j = i++;  // 先赋值j=0,再i=1
    cout << i << " " << j << endl;  // 输出1 0
    i = 0;
    j = ++i;  // 先i=1,再赋值j=1
    cout << i << " " << j << endl;  // 输出1 1
    return 0;
}

6.4 逗号运算符

  • 格式:表达式1, 表达式2, ..., 表达式n

  • 求值顺序:从左到右,整个表达式的值为最后一个表达式的值

示例代码:逗号表达式

cpp 复制代码
#include <iostream>
using namespace std;

int main() {
    int a = 2, b = 4, c = 6, x, y;
    y = (x = a + b, b + c);  // x=6,y=10
    cout << "y=" << y << ", x=" << x << endl;  // 运行结果:y=10, x=6
    return 0;
}

6.5 混合运算类型转换

不同类型数据混合运算时,按"低级别→高级别"自动转换:

char/short → int → unsigned → long → float → double

七、总结

本章核心是掌握"数据如何描述"和"数据如何操作":数据类型决定了数据的存储方式和范围,常量与变量是数据的载体,运算符与表达式实现了数据的计算逻辑。学习时需重点关注:

  1. 变量命名规范和初始化要求

  2. 整型溢出、浮点型舍入误差等边界问题

  3. 字符与整型的互通性、字符串与字符的区别

  4. 运算符优先级(先乘除后加减)和结合性(多数自左至右)

建议结合示例代码反复练习,重点掌握符号常量、转义字符、自增自减、强制类型转换的使用场景,为后续循环、分支等语法学习打下基础。

相关推荐
徐行code2 小时前
std::bind()和lambda的区别
c++
小老鼠不吃猫2 小时前
C++20 STL <numbers> 数学常量库
开发语言·c++·c++20
程序员zgh2 小时前
C++常用设计模式
c语言·数据结构·c++·设计模式
im_AMBER2 小时前
Leetcode 80 统计一个数组中好对子的数目
数据结构·c++·笔记·学习·算法·leetcode
消失的旧时光-19432 小时前
从 Android 回调到 C 接口:函数指针 + void* self 的一次彻底理解
android·c语言·开发语言
尘诞辰3 小时前
【C语言】数据在内存中的储存
c语言·开发语言·数据结构·c++
无敌最俊朗@3 小时前
STL-关联容器(面试复习4)
开发语言·c++
无限进步_3 小时前
【C语言】栈(Stack)数据结构的实现与应用
c语言·开发语言·数据结构·c++·后端·visual studio
闻缺陷则喜何志丹3 小时前
【计算几何 SAT轴】P6732 「Wdsr-2」方分|普及+
c++·数学·计算几何·sat轴·凸多边形分离