当前位置: 首页 > 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++内功的“任督二脉”,后续修炼面向对象和模板等高级境界将事半功倍!

相关文章:

  • DAY 53 对抗生成网络
  • 每日算法刷题Day30 6.13:leetcode二分答案2道题,用时1h10min
  • 玩转计算机视觉——按照配置部署paddleOCR(英伟达环境与昇腾300IDUO环境)
  • java爬虫框架,简单高效,易用,附带可运行案例
  • 基于 Spring Cloud Gateway + Sentinel 实现高并发限流保护机制
  • 流数据机器学习框架 CapyMOA
  • Spring Boot常用依赖大全:从入门到精通
  • Java求职者面试指南:Spring, Spring Boot, Spring MVC, MyBatis技术深度解析
  • MySQL(多表设计、多表查询)
  • keil下载安装
  • 【写实交互数字人】实时数字人助力政务变革:技术、产品与应用价值的全景剖析
  • Handler消息机制
  • 【压缩中断数目--二级中断查找】
  • 深入理解Python协程:asyncio、异步并发、事件循环
  • 三格电子——Profinet 协议 IO-Link 主站网关IO-Link 系列集线器如何组网使用
  • 解决 Git 错误:error: src refspec master does not match any
  • 看PDF文献用什么软件比较好?高效文献阅读工具推荐
  • k8s从入门到放弃之k3s轻量级
  • 多重根号表达式及其MATLAB实现
  • 对于序列“seq_xxl_job_xxx”权限不足(APP)
  • 2019建设银行招聘网站/南昌seo公司
  • 重庆网站设计哪家好/整站优化 快速排名
  • 滕州网站制作/域名被墙查询检测
  • 做公司网站有什么需要注意的/广州现在有什么病毒感染
  • 南宁建网站/贵阳搜索引擎排名推广
  • eclips怎么做网站/今天新闻联播