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

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.xdnf.cn/news/19496.html

相关文章:

  • 从DevOps到BizDevOps:哪些DevOps工具能够成为业务创新加速引擎?
  • 响应式编程框架Reactor【8】
  • Notepad++近期版本避雷
  • 中心扩展算法
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘tox’问题
  • 利用 DrissionPage 精准获取淘宝商品描述:Python 爬虫实战指南
  • C/C++、Python和Java语言的比较
  • 【职业】算法与数据结构专题
  • 15693协议ICODE SLI 系列标签应用场景说明及读、写、密钥认证操作Qt c++源码,支持统信、麒麟等国产Linux系统
  • 浪潮科技Java开发面试题及参考答案(120道题-上)
  • 利用本地电脑上的MobaXterm连接虚拟机上的Ubuntu
  • 基于SpringBoot音乐翻唱平台
  • Linux Shell 脚本中括号类型及用途
  • three.js+WebGL踩坑经验合集(10.2):镜像问题又一坑——THREE.InstancedMesh的正反面向光问题
  • UART-TCP双向桥接服务
  • 【51单片机三路抢答器定时器1工作1外部中断1】2022-11-24
  • 参数检验vs非参数检验
  • docker 网络配置
  • 【高级】系统架构师 | 2025年上半年综合真题
  • 硬件开发_基于Zigee组网的果园养殖监控系统
  • 56_基于深度学习的X光安检危险物品检测系统(yolo11、yolov8、yolov5+UI界面+Python项目源码+模型+标注好的数据集)
  • aws上创建jenkins
  • 力扣 23 912题(堆)
  • JAVA 面试宝典02
  • 工业飞拍技术:高速生产线的 “动态抓拍神器”,到底牛在哪?
  • 20250829的学习笔记
  • 基于GCN图神经网络的光伏功率预测Matlab代码
  • Spark实现推荐系统中的相似度算法
  • Proteus 仿真 + STM32CubeMX 协同开发全教程:从配置到仿真一步到位
  • 盟接之桥说制造:守正出奇:在能力圈内稳健前行,以需求导向赢得市场