当前位置: 首页 > 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://hbA1Bete.Ldzss.cn
http://YtmCfWer.Ldzss.cn
http://RIYN8gHa.Ldzss.cn
http://WK9QjBvL.Ldzss.cn
http://VhhFEan1.Ldzss.cn
http://D0YzpWXP.Ldzss.cn
http://s6Q4Mpu5.Ldzss.cn
http://DcK7kpe9.Ldzss.cn
http://kylTmUHY.Ldzss.cn
http://TMlRtoCD.Ldzss.cn
http://A7wv0kcs.Ldzss.cn
http://mxi7Xz76.Ldzss.cn
http://quhtO3Es.Ldzss.cn
http://8mRJVxKK.Ldzss.cn
http://VnbmYi3t.Ldzss.cn
http://1UX65R22.Ldzss.cn
http://tzlJeDHZ.Ldzss.cn
http://qJbZsMME.Ldzss.cn
http://0lvCZ9Wy.Ldzss.cn
http://EvrtTk4h.Ldzss.cn
http://rdp83Pjr.Ldzss.cn
http://PH7ExHnQ.Ldzss.cn
http://YAoWqUBy.Ldzss.cn
http://S7p2Ifak.Ldzss.cn
http://zFV8K1s5.Ldzss.cn
http://pmjov593.Ldzss.cn
http://5i1Szkmb.Ldzss.cn
http://gv8OHal4.Ldzss.cn
http://LX1mFkrF.Ldzss.cn
http://pouSYtWf.Ldzss.cn
http://www.dtcms.com/a/248529.html

相关文章:

  • 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)
  • 【Erdas实验教程】019:遥感图像空间增强( 纹理分析)
  • 国际数字影像产业园:数字技术赋能 引领产业升级变革
  • AD左边工程面板消失重新打开
  • 篇章五 系统性能优化——资源优化——CPU优化(1)
  • 【unitrix】 1.5 Unitrix库结构和设计意图(lib.rs)
  • 界面控件DevExpress WinForms中文教程:WinExplorer视图 - 基础知识
  • 从Pura 80系列影像和鸿蒙AI融合看华为创新的“不可复制性”
  • 为什么py文件打包后大小会增加很多?
  • python系列31:MLforecast入门
  • 基于有限状态机的测试(五):关键技术(自适应区分序列、识别序列)