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

C++ 学习与 CLion 使用:(五)数据类型,包括整型、实型、字符型、转义字符、字符串、布尔型

上一篇下一篇
常量与变量运算符

数据类型

sizeof():可以查看数据所占字节。

1 字节 = 8 bit 。

1)整型

数据类型占用空间取值范围取值范围
short(短整型)2 字节-32768~32767-215~215-1
int(整形)4 字节-2147483648~2147483647-231~231-1
long(长整型)Windows为 4 字节,
Linux为 4 字节(32位),8 字节(64位)
4 字节范围同上,8 字节范围同下4 字节范围同上,8 字节范围同下
long long(长长整型)8 字节-9223372036854775808
~
9223372036854775807
-263~263-1
unsigned short(无符号短整型)2 字节0~655350~216-1
unsigned int(无符号整形)4 字节0~42949672950~232-1
unsigned long(无符号长整型)Windows为 4 字节,
Linux为 4 字节(32位),8 字节(64位)
4 字节范围同上,8 字节范围同下4 字节范围同上,8 字节范围同下
unsigned long long(无符号长长整型)8 字节0~18446744073709551615-264~264-1

有符号的数据类型的全称是:signed int ,这里的 signed 可以省略。 并且要注意数据类型中的空格。

在引入 windows.h 头文件后,无符号数据类型有快捷写法,比如:unsigned intu_int

2)实型

类型有效位数(参考)字节数
float(单精度浮点数)6~74 字节
double(双精度浮点数)15~168 字节
long double(多/长精度浮点数)18~1916 字节

实型数据全都是有符号的。

根据不同的编译器标准,其有效小数位数和取值范围会有些许变化。

有效位数:整数位+小数点+小数位(从左边开始数)。在2025版CLion中经过实测,不论何种类型,小数位数最多只能精确显示 6 位

3)字符型

类型字节数范围映射表
[signed] char1 字节-128~127ASCLL表
unsigned char1 字节0~255ASCLL表

ASCLL码表

非打印控制字符:

二进制八进制▲十进制▲十六进制字符/缩写解释
00000000000000NUL (NULL)空字符
00000001001101SOH (Start Of Headling)标题开始
00000010002202STX (Start Of Text)正文开始
00000011003303ETX (End Of Text)正文结束
00000100004404EOT (End Of Transmission)传输结束
00000101005505ENQ (Enquiry)请求
00000110006606ACK (Acknowledge)回应/响应/收到通知
00000111007707BEL (Bell)响铃
00001000010808BS (Backspace)退格
00001001011909HT (Horizontal Tab)水平制表符
00001010012100ALF/NL (Line Feed/New Line)换行键
00001011013110BVT (Vertical Tab)垂直制表符
00001100014120CFF/NP (Form Feed/New Page)换页键
00001101015130DCR (Carriage Return)回车键
00001110016140ESO (Shift Out)不用切换
00001111017150FSI (Shift In)启用切换
000100000201610DLE (Data Link Escape)数据链路转义
000100010211711DC1/XON (Device Control 1/Transmission On)设备控制1/传输开始
000100100221812DC2 (Device Control 2)设备控制2
000100110231913DC3/XOFF (Device Control 3/Transmission Off)设备控制3/传输中断
000101000242014DC4 (Device Control 4)设备控制4
000101010252115NAK (Negative Acknowledge)无响应/非正常响应/拒绝接收
000101100262216SYN (Synchronous Idle)同步空闲
000101110272317ETB (End of Transmission Block)传输块结束/块传输终止
000110000302418CAN (Cancel)取消
000110010312519EM (End of Medium)已到介质末端/介质存储已满/介质中断
00011010032261ASUB (Substitute)替补/替换
00011011033271BESC (Escape)逃离/取消
00011100034281CFS (File Separator)文件分割符
00011101035291DGS (Group Separator)组分隔符/分组符
00011110036301ERS (Record Separator)记录分离符
00011111037311FUS (Unit Separator)单元分隔符

打印字符:

二进制八进制▲十进制▲十六进制字符/缩写解释
001000000403220(Space)空格
001000010413321!
001000100423422"
001000110433523#
001001000443624$
001001010453725%
001001100463826&
001001110473927
001010000504028(
001010010514129)
00101010052422A*****
00101011053432B+
00101100054442C,
00101101055452D-
00101110056462E.
00101111057472F/
0011000006048300
0011000106149311
0011001006250322
0011001106351333
0011010006452344
0011010106553355
0011011006654366
0011011106755377
0011100007056388
0011100107157399
00111010072583A:
00111011073593B;
00111100074603C<
00111101075613D=
00111110076623E>
00111111077633F?
010000001006440@
010000011016541A
010000101026642B
010000111036743C
010001001046844D
010001011056945E
010001101067046F
010001111077147G
010010001107248H
010010011117349I
01001010112744AJ
01001011113754BK
01001100114764CL
01001101115774DM
01001110116784EN
01001111117794FO
010100001208050P
010100011218151Q
010100101228252R
010100111238353S
010101001248454T
010101011258555U
010101101268656V
010101111278757W
010110001308858X
010110011318959Y
01011010132905AZ
01011011133915B[
01011100134925C\
01011101135935D]
01011110136945E^
01011111137955F_
011000001409660`
011000011419761a
011000101429862b
011000111439963c
0110010014410064d
0110010114510165e
0110011014610266f
0110011114710367g
0110100015010468h
0110100115110569i
011010101521066Aj
011010111531076Bk
011011001541086Cl
011011011551096Dm
011011101561106En
011011111571116Fo
0111000016011270p
0111000116111371q
0111001016211472r
0111001116311573s
0111010016411674t
0111010116511775u
0111011016611876v
0111011116711977w
0111100017012078x
0111100117112179y
011110101721227Az
011110111731237B{
011111001741247C|
011111011751257D}
011111101761267E~
011111111771277FDEL (Delete)删除

示例:

#include <iostream>
#include "windows.h"using namespace std;int main()
{SetConsoleOutputCP(CP_UTF8);char ch1 = 35;char ch2 = '#';char ch3 = '#'+1;cout << ch1 << " 和 " << ch2 << endl;cout << ch2+0 << " 和 " << ch2+1 << endl;  // 在cout打印时加入运算, 编译器会认为我们想输出的是数字cout << ch3 << " 和 " << ch3+0 << endl;return 0;
}

结果:

# 和 #
35 和 36
$ 和 36

4)转义字符

如果要使用非打印控制字符的功能,可以使用下方转义字符的形式:

转义字符:在普通字符前加上 \ 作为开头,将其赋予(ASCLL表对应的)非打印控制字符的功能。

转义字符含义ASCLL码值(10进制)
\a警报007
\b退格(BS),将当前位置移到前一列008
\f换页(FF),将当前位置移到下页开头012
\n换行(LF),将当前位置移到下一行开头010
\r回车(CR),将当前位置移到本行开头013
\t水平制表(HT)(跳到下一个TAB位置,对齐用)
一个\t可以补充至8个字符位
009
\v垂直制表(VT)011
\\代表一个反斜线字符092
\’代表一个单引号字符039
\"代表一个双引号字符034
\0空字符000
\ddd8 进制转义字符,d 范围0-7无十进制,表达三位 8 进制含义
\xhh16 进制转义字符,h 范围 09,af,A-F无十进制,表达三位 16 进制含义

示例:

#include <iostream>
#include "windows.h"using namespace std;int main()
{SetConsoleOutputCP(CP_UTF8);cout << "此致!\n" << "   敬礼!" << endl;  // 转义字符 \ncout << "------------------" << endl;cout << "old\tman" << endl;              // 转义字符 \t, 效果等同于 tab 键, 一个\t可以补充至8个字符位cout << "young\tboy" << endl;            // young不足8个字符位, 后面会补充3个空字符位cout << "outstanding\tboy" << endl;      // outstanding超过了8个字符位, 但不超过16个字符位, 后面会补充(16-11)个字符位cout << "------------------" << endl;cout << "\\ 和 \' 和 \" 和 \0 和" << " 和 " << 0 << endl;return 0;
}

结果:

此致!敬礼!
------------------
old     man
young   boy
outstanding     boy
------------------
\ 和 ' 和 " 和  和 0

5)字符串

在 CLion 中,既可以使用 C 语言风格的字符串,也可以使用 C++ 本身风格的字符串(主要用后者)。

C 语言风格(要先引入头文件 #include "cstring" ):

  • char str1[]="...";(常用)
  • char *str2="...";

C++ 语言风格

  • string str3="...";(常用)

示例:

#include <iostream>
#include "windows.h"using namespace std;int main()
{SetConsoleOutputCP(CP_UTF8);//  C 语言风格的字符串char str1[100]="handsome";  // 字符数组, 后续无法直接通过赋值更改内容char *str2 = "beautiful";   // 指针形式的字符串// C++ 语言风格的字符串string str3 = "progressive";  // C++ string 类型的字符串cout << str1 << "\n" << str2 << "\n"  << str3 << endl;cout << "------------------" << endl;// 后两种方法可以修改字符串的内容str2 = "you are beautiful";str3 = "we are progressive";cout << str1 << "\n" << str2 << "\n"  << str3 << endl;return 0;
}

结果:

handsome
beautiful
progressive
------------------
handsome
you are beautiful
we are progressive

字符串的拼接

字符串之间:使用 + 号进行连接即可;

字符串和非字符串之间:使用 to_string() 内置函数将非字符串转换为字符串,再使用 + 号进行连接即可。

示例:

#include <iostream>
#include "windows.h"using namespace std;int main()
{SetConsoleOutputCP(CP_UTF8);string name = "炸膛坦客";int age = 22;float height = 170.5;cout << "我的名字是:" + name + ", 我今年"+ to_string(age) + "岁, 身高" + to_string(height) + "cm" << endl;return 0;
}

结果:

我的名字是:炸膛坦客, 我今年22岁, 身高170.500000cm

6)布尔型

数据类型字面量说明
booltrue 或 false真或假,本质是1或0

示例:

#include <iostream>
#include "windows.h"using namespace std;int main()
{SetConsoleOutputCP(CP_UTF8);bool flag1 = true;bool flag2 = false;cout << flag1 << " 和 " << flag2 << endl;return 0;
}

结果:

1 和 0

从结果可以看出,其数字本质。

7)枚举型

枚举是一种用户自定义类型,可以将数字标号定义为具体的符号,也就是说枚举类型本质上是数字。

枚举有点像 #define 语法,只不过枚举中元素的排列是从 0 递增的,除非令其等于某个数字。

枚举语法:

enum 枚举类型名{枚举元素1,    // 本质上是0枚举元素2,    // 本质上是1枚举元素3=6,  // 本质上是6, 因为这里手动定义了, 所以后面的都会在此基础上递增枚举元素4,    // 本质上是7...
}

示例:

#include <iostream>
#include "windows.h"using namespace std;int main()
{SetConsoleOutputCP(CP_UTF8);int num;enum color {black,white,red=6,green,};cout<<"red 对应的是数字:"<<red<<endl;cout<<"green 对应的是数字:"<<green<<endl;cout<<"Enter a number: ";cin>>num;switch(num) {case black:cout <<"这是黑色!"<< endl;break;case white:cout <<"这是白色"<< endl;break;case red:cout <<"这是红色"<< endl;break;case green:cout <<"这是绿色"<< endl;default:cout <<"无效!"<< endl;}return 0;
}

结果:

red 对应的是数字:6
green 对应的是数字:7
Enter a number: 1
这是白色

http://www.dtcms.com/a/362242.html

相关文章:

  • 椭圆曲线的数学基础
  • 【算法专题训练】17、双向链表
  • openEuler2403部署Redis8集群
  • AI推理方法演进:Chain-of-Thought、Tree-of-Thought与Graph-of-Thought技术对比分析
  • Spring 控制器参数注解
  • LangGraph 边(Edge)机制完全指南
  • Java 不支持在非静态内部类中声明静态 Static declarations in inner classes are not supported异常处理
  • 2025我“生发”了『折行』|『内注』|『终端正偿』|『中文负偿』四大“邪术”(前二造福python代码阅读者;后二助力所有艺术人)
  • nrf52840 解锁
  • 2025年09月01日Github流行趋势
  • 数据结构初阶:详解栈和队列(下)——队列
  • 并发编程--线程池(1)线程池概念 Java 线程池体系(Executor、ThreadPoolExecutor、Executors)
  • resnet网络
  • 甲烷浓度时空演变趋势分析与异常值计算(附下载脚本)
  • 洛谷 P5836 [USACO19DEC] Milk Visits S-普及/提高-
  • 基于MCP架构的OpenWeather API服务端设计与实现
  • jetson开发板Ubuntu系统Docker中使用 MySQL 数据库详解-安装与配置指南
  • Python上下文管理器与资源管理
  • 基于51单片机停车场车位引导系统设计
  • 四个典型框架对比
  • 软考-操作系统-错题收集(2)文件系统的多级索引结构
  • 【重学MySQL】九十七、MySQL目录结构与文件系统解析
  • 二叉树核心操作知识点整理
  • 大模型微调显存内存节约方法
  • Java实现的IP4地址合法判断新思路
  • GPT - 5 技术前瞻与开发者高效接入路径探索​
  • 高性能客服系统源码实现
  • 文件上传漏洞基础及挖掘流程
  • 2013 NeuralIPS Translating Embeddings for Modeling Multi-relational Data
  • JAVA后端开发——MyBatis 结合 MySQL JSON 类型查询详解