当前位置: 首页 > news >正文

《第二章-内功筑基》 C++修炼生涯笔记(基础篇)数据类型与运算符

一、数据类型 

以下是C++数据类型与运算符的详解,结合表格和说明呈现:

1. 基本数据类型
类型大小 (字节)取值范围示例
bool1true / falsebool flag = true;
char1-128127 或 0255char c = 'A';
signed char1-128~127signed char sc = -10;
unsigned char10~255unsigned char uc = 200;
short2-32,768~32,767short s = 100;
int4 (通常)-2³¹ ~ 2³¹-1int i = -5000;
long4 或 8-2³¹ ~ 2³¹-1 或 -2⁶³~2⁶³-1long l = 100000;
long long8-2⁶³ ~ 2⁶³-1long long ll = 1e18;
float4±3.4e-38 ~ ±3.4e38float f = 3.14f;
double8±1.7e-308 ~ ±1.7e308double d = 2.71828;
void-无值void func();

注意

  • 具体大小取决于编译器和操作系统(如 int 在16位系统中为2字节)。
  • C++11新增:char16_t (2字节), char32_t (4字节) 用于Unicode。

2. 派生数据类型
类型描述示例
指针存储内存地址int* p = &i;
数组同类型元素的集合int arr[5] = {1,2,3};
引用变量的别名(必须初始化)int& ref = i;
结构体用户自定义的复合数据类型struct Point { int x,y; };
面向对象的核心class Student { ... };
枚举命名整数常量集合enum Color {RED, GREEN};
联合体共享内存的不同类型成员union Data { int i; float f; };

二、C++ 运算符

1. 算术运算符
运算符功能示例结果
+加法3 + 25
-减法5 - 32
*乘法4 * 520
/除法10 / 33 (整数除)
%取模10 % 31
++自增int a=5; a++;a=6
--自减int b=4; --b;b=3

注意

  • 整数除法会截断小数部分(10/3=3)。
  • 自增/自减分前置(先计算后赋值)和后置(先赋值后计算)。

2. 关系运算符
运算符含义示例结果
==等于5 == 3false
!=不等于5 != 3true
>大于5 > 3true
<小于5 < 3false
>=大于等于5 >= 5true
<=小于等于4 <= 3false

3. 逻辑运算符
运算符功能示例结果
&&逻辑与(5>3) && (2<1)false
`\\`逻辑或
!逻辑非!(5>3)false

4. 位运算符
运算符功能示例结果(二进制)
&按位与5 & 3 (101 & 011)001 (1)
`\`按位或`5 \
^按位异或5 ^ 3110 (6)
~取反~5补码形式(如 -6
<<左移5 << 11010 (10)
>>右移5 >> 110 (2)

5. 赋值运算符
运算符等价形式示例效果
=-a = 5;赋值
+=a = a + ba += 3;加后赋值
-=a = a - ba -= 2;减后赋值
*=a = a * ba *= 4;乘后赋值
/=a = a / ba /= 2;除后赋值
%=a = a % ba %= 3;取模后赋值

6. 特殊运算符
运算符功能示例
? :三元条件运算符int max = (a>b) ? a : b;
sizeof()返回类型/对象大小sizeof(int)4
,逗号运算符(顺序求值)a = (b=3, b+2);a=5
::作用域解析std::cout
typeid()获取类型信息typeid(int).name()"i"
dynamic_cast安全向下转型dynamic_cast<Derived*>(base_ptr)

三、关键概念详解

1. 数据类型转换
转换类型描述示例
隐式转换编译器自动进行int i = 3.14;i=3 (截断)
显式转换强制类型转换double d = (double)5/2;d=2.5
C++风格转换更安全的转换方式static_cast<double>(5)/2
2. 运算符优先级(部分)
优先级运算符结合性
1:: (作用域)左到右
2++, --, sizeof, !, ~右到左
3*, /, %左到右
4+, -左到右
5<<, >>左到右
6<, <=, >, >=左到右
7==, !=左到右
12&&左到右
13`\\
15? :右到左
16=, +=, -= 等赋值运算符右到左

口诀
括号成员第一;全体单目第二;乘除余三,加减四;移位五,关系六;等与不等排第七;位与异或和位或;逻辑与或三二一。


四、示例代码

#include <iostream>
using namespace std;int main() {// 数据类型示例double pi = 3.14159;int truncated = static_cast<int>(pi); // 显式转换: 3// 运算符综合int a = 10, b = 3;int mod = a % b;      // 取模: 1bool cmp = (a >= 10); // 比较: trueint bitwise = a << 2; // 左移2位: 40// 三元运算符   也叫  三目运算符string result = (b > 0) ? "Positive" : "Negative";cout << "Mod: " << mod << "\nBitwise: " << bitwise << endl;return 0;
}

五、避坑指南

  1. 整数溢出
    unsigned char c = 300; → 溢出(300 > 255),行为未定义!
  2. 浮点精度陷阱
    0.1 + 0.2 != 0.3(二进制浮点无法精确表示0.1)。
  3. 指针野引用
    int* p; *p = 10; → 未初始化的指针导致崩溃。
  4. 运算符优先级混淆
    int x = 5 + 3 * 2;x=11(乘法优先级高于加法)。

掌握这些核心知识,相当于打通C++内功的“任督二脉”,后续修炼面向对象和模板等高级境界将事半功倍!

http://www.xdnf.cn/news/1023985.html

相关文章:

  • 前端给一行文字不设置宽度 ,不拆分 ,又能让某几个字在视觉下方居中显示
  • LeetCode 2529.正整数和负整数的最大计数
  • Appium + Java 测试全流程
  • Spring boot 的 maven 打包过程
  • Fiori 初学记录----怎么调用后端系统odata 服务实现简单的CURD
  • 使用特征线法求解一阶线性齐次偏微分方程组
  • 多模态大语言模型arxiv论文略读(121)
  • html+css+js趣味小游戏~(附源码)
  • 数据库分库分表情况下数据统计的相关问题详解(面试问答)
  • C++面试(9)-----反转链表
  • 2025年渗透测试面试题总结-字节跳动[实习]安全研发员(题目+回答)
  • CoLMDriver:基于LLM的协同自动驾驶
  • LangChain面试内容整理-知识点10:文本嵌入模型(Embeddings)使用
  • 如何安装使用qmt脚本跟单聚宽策略
  • C++四大默认成员函数:构造、析构、拷贝构造与赋值重载
  • 利用pycharm搭建模型步骤
  • Sqoop进阶之路:解锁数据迁移新姿势
  • 2025.6.12 【校内 NOI 训练赛】记录(集训队互测选做)
  • 使用OceanBase的Oblogminer进行日志挖掘的实践
  • Mysql 函数concat、concat_ws和group_concat
  • MySQL的对表对整库备份脚本
  • Elasticsearch 常用命令(未完成)
  • python中的文件操作处理:文本文件的处理、二进制文件的处理
  • 心之眼 豪华中文 免安 离线运行版
  • 大模型记忆相关(MemoryOs)
  • kafka Tool (Offset Explorer)使用SASL Plaintext进行身份验证
  • cinematic-gaussians
  • 【RAG+读代码】学术文档解析工具Nougat
  • DeepSeek 引领前端开发变革:AI 助力学习与工作新路径
  • 基于STM32手势识别智能家居系统