先导:

目录

一、整形

二、浮点型

!保留指定小数位数 

三、布尔类型

关系运算

逻辑运算

​C++逻辑运算四句口诀​

四、字符型

ASCll码 

C++中的字符表示

字符比较

ASCII中的常用转换

大小写转换

转换成0~25

五、数据类型隐式转换

​1. 隐式转换的通用规则​

​2. 隐式转换的优先级​

​示例:算术运算时的隐式转换​

​3. 整数提升(Integer Promotion)​​

​4. 算术转换(Arithmetic Conversion)​​


一、整形

我们平常最常见的整形是int,它占4个字节 ,也就是32比特,可表示的范围为-2^{31}~2^{31}-1,如果是 unsigned int,即没有负数区间,表示范围为0~2^{32}-1

cout << sizeof(int) << endl << sizeof(1234)输出:
4
4

如果我们存储的数字范围超过int了,那么我们就可以使用long long。long long占8个字节

cout << sizeof(123456789123456789) << endl << sizeof(long long);输出:
8
8

有的时候我们需要把int转换为long long,我们可以将一个数字乘上1LL或者加上后缀ll或LL

cout << sizeof(1234 * 1LL);
输出:
8

在实际编程过程中,如果需要多次使用 long long,我们可以通过 typedef 关键字将 long long 重命名为 ll 

使用格式:typedef long long ll;

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a;
int main(){cin >> a;cout << sizeof(a);return 0;
}
输出:
8

另外,在C++ primer是这样规定的:sizeof(short) ≤ sizeof(int) ≤ sizeof(long) ≤ sizeof(long long),但是各个数据类型的具体长度,则是由编译器自行决定的。

在我们考试的系统中,short 占 2 个字节,long 占 8 个字节。

二、浮点型

名称数据类型字节数数据范围有效位数
单精度浮点数float4B-3.4e38~3.4e386~7位
双精度浮点数double8B-1.7e308~1.7e30815~16位
长双精度浮点数long double16B-1.2e4932~1.2e493218~19位

float 占 4 字节,保留有效位数 7 位,double 占 8 字节,保留有效位数 16 位。一般在算法竞赛中,我们都使用 double

其中,浮点型默认为double类,跟long long一样,也可以通过后缀f、F(单精度浮点型)、L(长双精度浮点型)。

cout << sizeof(1.11) << endl;
cout << sizeof(1.11f) << endl;
cout << sizeof(1.11F) << endl;
cout << sizeof(1.11L) << endl;输出:
8
4
4
16

!保留指定小数位数 

 注意:

  1. 使用setprecision保留小数位数时,需要引入头文件#include <iomanip>
  2. 必须加 fixed,否则实际输出位数可能会小于指定保留位数。
  3. 以上所有格式化控制符只对紧跟在其后的数据有作用
#include <iostream>
#include <iomanip>
using namespace std;
const double P = 3.1415;
int main(){cout << P << endl;cout << setprecision(5) << P << endl; //错误示范,此处必须要加fixedcout << setprecision(6) << 3.14159265358 << endl;cout << fixed << setprecision(3) << P << endl;cout << fixed << setprecision(5) << P << endl;return 0;
}

输出为: 

    3.1415
    3.1415
    3.14159
    3.142
    3.14150

三、布尔类型

名称数据类型字节数数值范围
布尔bool1Btrue或false

布尔变量声明和赋值

bool a = true, b = false;
bool a, b;
bool a = 0, b = 1;
//注意,同之前的一样,每个变量只能被定义声明一次,这里只是为了方便演示

输出的bool类型,并不会输出true或者false,而是输出1或0,其中,true是1,false是0一个非零数定义成bool的时候为true,但输出是1!!!

cout << bool(0.2) << endl;    //输出:1
bool a = -1, b = 0;
cout << a << " " << b;    //输出:1 0
int c = bool(3), d = false;
cout << c << " " << d << endl;    //输出1 0

关系运算

大小关系C++关系运算符数学符号
大于>>
小于<<
大于等于>=      \geq
小于等于<=\leq
等于===
不等于!=\neq

重点来了:

数值A   关系运算符   数值B(表达式的值:布尔值)

什么意思呢?让我们来看几个例子

比如表达式

1 > 2

1显然比2小,所以这个表达式的值为false(否)

(a = 3) == 3

这个式子中,先把a赋值成了3,再判断a是不是等于3,这个结果肯定是true

有一个比较容易判断错的式子:(1 < 2)== false

这个式子的值为false。首先,我们先解析括号中的式子:1<2,这个式子的结果肯定为真,而真与假矛盾了,所以这个式子肯定为假

记住这个四句口诀,轻松搞定多重关系运算符的真假判断:


🎯 口诀速记

  1. 括号优先算​(先算括号内)
  2. 比较从左看​(同级从左到右)
  3. 赋值返右边​(=返回赋值结果)
  4. 真值对比干​(true/false直接比)

🌰 例子秒懂

  • (a=3)==3 → ​​(口诀3:赋值返右边,a=3返回3,再比3==3
  • (1<2)==false → ​​(口诀1+4:先算1<2true,再比true==false

​**⚡ 避坑提醒**​

  • 小心**赋值=比较==**别混淆!
  • 遇到<>等比较符,​从左到右依次算。

用这口诀,再复杂的表达式也能秒拆解! ✨

逻辑运算

逻辑运算符含义
&&逻辑与,如果两个表达式的值都为真,就返回真,否则,就返回假
||逻辑或,两个表达式有一个表达式的值为真,就返回真
逻辑非,如果表达式为真,就返回假。表达式为假,就返回真

逻辑运算真值表(1表示表达式的值为真,0表示假):

ABA && BA || BA ! B
11110
10010
01011
00001

 

重点又又又来了🙂:

布尔值A   逻辑运算符   布尔值B(表达式的值:布尔值)

大家一定要牢记于心,我们来看看一些例题:

判断一个数a是否满足2\leq a\leq 17,有很多初学者会这样写:

2 <= a <= 17

 但这是大错特错的,在C++中,程序是顺序执行的,它会先执行2<=a,不论结果如何,返回的一定是一个布尔值,可布尔值如何跟17进行比较,所以我们要用上逻辑运算符,这样写:

2 <= a && a <= 17

只有两种条件都满足了,也就是满足了2\leq a\leq 17,结果才为真。

判断一个数是否是3或5的倍数:

a % 3 == 0 || a % 5 == 0

C++逻辑运算四句口诀

  1. ​"非先算,与或后"​​(! > && > ||
  2. ​"或一真,与全真"​​(|| 一真即真,&& 全真才真)
  3. ​"区间判,与相连"​​(a>=2 && a<=17
  4. ​"整除判,或相连"​​(num%3==0 || num%5==0

🌰 例子秒懂

  • !flag && (x>5) → 先算!flag,再算&&(口诀1)
  • age>=18 || score>90 → 满足一个即真(口诀2)
  • 2<=a && a<=17 → 区间必须用&&(口诀3)
  • n%3==0 || n%5==0 → 3或5的倍数(口诀4)

⚡ 核心:优先级+短路求值+区间写法,四句搞定所有逻辑判断! ✨

在写逻辑表达式时,一定要注意优先级,如果优先级靠后的那个运算符,一定要加括号!

 对于布尔类型,需要研究的知识有很多,这对于以后的基础都非常重要,小编之后也会带着大家一起练习。

四、字符型

字符常量是由单个字符组成,所有字符采用 ASCII 编码,通用 ASCII 编码共有 128 个字符。在程序中通常用一对单引号将单个字符括起来表示一个字符常量。如:'a','0','A'。

名称数据类型字节数数据范围
字符char1B-128~127
无符号字符unsigned char1B0~255

ASCll码 

ASCII码:它是一种基础的字符编码标准,用7位二进制数(即0~127的十进制范围)表示128个字符。

  • 标准ASCII(0~127)​​:
    • 0~31​:控制字符(如换行\n、制表符\t、回车\r等)。
    • 32~126​:可打印字符:
      • 32:空格(
      • 48~57:数字 09
      • 65~90:大写字母 AZ
      • 97~122:小写字母 az
      • 其他:标点符号(如 !, @, # 等)。
    • 127​:删除控制字符(DEL)。
  • 扩展ASCII(128~255)​​:非标准,依赖系统(如Windows-1252),表示特殊符号(如é, ©等)。

C++中的字符表示

char a = 'A';//存储ASCII值65
cout << a << endl;
char a = 65;//定义a在ASCII中为A
cout << a;输出:
A
A

我们可以使用转义字符,来实现一些输出(不要求掌握后两个)

名称字符形式
换行\n0X0A
水平制表\t0X09
反斜杠\\0X5C
#include <bits/stdc++.h>
using namespace std;
int main(){cout << "大家好\n我是\t小猫\\";return 0;
}

大家可以运行看看

字符比较

这部分就要用到之前讲过的关系运算了,大家可以复习一下。(注意,这里我们所讲的是字符,不是字符串,字符串之间的比较方式为字典序)

字符比较和数字之前的比较一样,都是返回表达式的值为真还是假,但是字符比较的不是字符,而是ASCII中字母所代表的数字,举一些例子:

  • 表达式'a'>'b'的值,a在ASCII中为97, b为98,a应该比b小,这个表达式的值为假
  • '0'<'2',这个的值显然为真,因为48<50

在这里要补充一点,字符和字符之间是可以进行运算的,参与运算的也是每个字母代表的ASCII值,结果也是数字,如'b'+1的结果是99。

ASCII中的常用转换

大小写转换

我们可以根据ASCII中的规律进行大小写转换,我们可以发现,大写字母和小写字母之间ASCII值只差了32(注意,小写字母转化成大写字母时,需要减去32,反之,则加上32),这样,就实现了C++中的大小写转换。

#include <bits/stdc++.h>
using namespace std;
int main(){char a = 'A';char b = a + 32;cout << a << endl << b;return 0;
}

转换成0~25

有时,我们为了看起来更方便一些,可以把字母转换成对应的0~25。怎么操作呢?对于小写字母,我们只要把对应的字母减去一个'a';对于大写字母,我们我们只要把对应的字母减去一个'A'

#include <bits/stdc++.h>
using namespace std;
int main(){char a = 'C';cout << a - 'A' << endl;char b = 'c';cout << b - 'a' << endl;
}

注意!!!ASCII只针对于英文,中文无效

五、数据类型隐式转换

隐式转换是指在编程语言中,由编译器自动执行的类型转换过程,而无需显式指定。这种转换是为了保持操作的一致性,使不同类型的数据能够在一些特定的上下文中进行运算或操作。隐式转换通常涉及到较小范围数据类型较大范围数据类型的转换,以避免数据丢失或提高精度。


1. 隐式转换的通用规则

隐式转换通常发生在以下情况:

  1. 赋值时​(=
  2. 算术运算时​(+-*/
  3. 函数调用时​(参数类型不匹配)
  4. 初始化时​(如 int x = 3.14;

编译器会按照从低精度到高精度、从小范围到大范围的原则自动转换数据类型,以避免数据丢失。


2. 隐式转换的优先级

C++的隐式转换遵循类型提升(Type Promotion)​规则,优先级如下(从低到高):

数据类型提升方向示例
bool→ inttrue → 1false → 0
charshort→ int'A' → 65
int→ unsigned int-1 → 4294967295(32位系统)
int→ longint → long(如果 int 范围不足)
int→ float5 → 5.0f
float→ double3.14f → 3.14
double→ long double3.14 → 3.14L

示例:算术运算时的隐式转换

int a = 5;
float b = 3.14f;
auto result = a + b;  // int → float(a提升为float)
cout << result;       // 输出 8.14(float类型)

3. 整数提升(Integer Promotion)​

在算术运算中,​比 int 小的整型(如 charshort会被提升为 int

char c = 'A';  // ASCII 65
short s = 100;
auto sum = c + s;  // char → int, short → int(运算结果为int)
cout << sum;       // 输出 165(int类型)

4. 算术转换(Arithmetic Conversion)​

如果两个操作数类型不同,C++会按照以下规则转换:

  1. 如果有一个操作数是 long double,另一个转换为 long double。​
  2. 否则,如果有一个操作数是 double,另一个转换为 double。​
  3. 否则,如果有一个操作数是 float,另一个转换为 float。​
  4. 否则,进行整数提升(char/short → int),然后按以下规则转换:​
    • 如果一个是 unsigned long,另一个转换为 unsigned long
    • 如果一个是 long,另一个是 unsigned int
      • 如果 long 能表示所有 unsigned int 值,则 unsigned int → long
      • 否则,两者都转换为 unsigned long
    • 如果一个是 long,另一个转换为 long
    • 否则,如果一个是 unsigned int,另一个转换为 unsigned int
    • 否则,两者都转换为 int

这就是所以内容了,内容较多,大家需要多多理解。下期我们一起练习,掌握它😄

整篇文章码字不易,大家能不能点个赞💗呢,谢谢

有什么问题可以在评论区讨论👬

备注:文章中有部分图片来自于百度

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/916608.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/916608.shtml
英文地址,请注明出处:http://en.pswp.cn/news/916608.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HCIP的MGRE综合实验1

拓扑图&#xff1a;二、实验要求 1、R5为ISP&#xff0c;只能进行IP地址配置&#xff0c;其所有地址均配为公有Ip地址;2、R1和R5间使用PPP的PAP认证&#xff0c;R5为主认证方&#xff1b;R2与R5之间使用PPP的CHAP认证&#xff0c;R5为主认证方;R3与R5之间使用HDLC封装;3、R2、R…

Go语言实战案例-链表的实现与遍历

在数据结构的世界中&#xff0c;链表&#xff08;Linked List&#xff09; 是一种经典的线性结构&#xff0c;它以灵活的插入与删除能力著称。链表不像数组那样需要连续的内存空间&#xff0c;而是通过节点指针连接形成一条“链”。本篇我们将使用 Go 语言实现一个单向链表&…

C++常见的仿函数,预定义函数,functor,二元操作函数(对vector操作,加减乘除取余位运算等 )

C 标准库在 <functional> 头文件中为我们提供了一套非常方便的预定义函数对象&#xff08;也称为“仿函数”或 “functor”&#xff09;&#xff0c;它们可以像变量一样直接传递给 std::reduce 和其他标准算法。 你提到的 std::bit_or 和 std::multiplies 就是其中的成员…

【RH134 问答题】第 6 章 管理 SELinux 安全性

目录SELinux 是如何保护资源的&#xff1f;什么是自由决定的访问控制(DAC)&#xff1f;它有什么特点&#xff1f;什么是强制访问控制(MAC)&#xff1f;它有什么特点&#xff1f;什么是 SELinux 上下文&#xff1f;setenforce 0 命令的作用是什么&#xff1f;定义一条 SELinux 文…

【MacOS】发展历程

很高兴为您详细介绍 macOS 的详细发展历程。macOS 是苹果公司开发的操作系统&#xff0c;用于 Mac 电脑、iPad 和 Apple TV 等设备。以下是 macos 的主要版本和发展历程&#xff1a;1. System 7 (1991)发布日期&#xff1a;1991年特点&#xff1a;引入多任务处理功能。改进了拖…

智慧社区项目开发(二)——基于 JWT 的登录验证功能实现详解

在 Web 应用中&#xff0c;登录验证是保障系统安全的核心环节。本文将结合具体接口文档&#xff0c;详细讲解如何基于 JWT&#xff08;JSON Web Token&#xff09;实现登录验证功能&#xff0c;包括 JWT 配置、工具类封装、登录流程处理等关键步骤&#xff0c;帮助开发者快速理…

Jmeter的元件使用介绍:(七)后置处理器详解

Jmeter的后置处理器主要用于取样器执行后的提取数据操作。 Jmeter常用的后置处理器有:Json提取器、正则表达式提取器、边界提取器、Beanshell后置处理器。此外还有Xpath提取器、CSS选择器提取器等&#xff0c;由于这两项多用前端页面提取元素&#xff0c;目前的项目基本都是采…

Allure的安装,在Pytest中的简单使用以及生成测试报告

目录 1.Allure的安装 1--下载网址 2--选择对应系统版本下载 3--配置Allure环境变量 4--验证安装是否成功 5--配置JAVAJDK的环境变量&#xff08;如果已经配置&#xff0c;可以忽视这一步&#xff09; 2.python中pytestAllure 1--python安装Allure包 2--生成测试报告 1--使用pyt…

Oracle 数据库报 ora-00257 错误并且执行alter system switch logfile 命令卡死的解决过程

Oracle 数据库报 ora-00257 错误并且执行alter system switch logfile 命令卡死的解决过程 7月26日下午&#xff0c;某医院用户的 HIS 系统无法连接&#xff0c;报如下错误&#xff1a;初步判断是归档日志问题。 用户的 HIS 系统数据库是双节点 Oracle 11g Rac 集群。登录服务器…

ArKTS:List 数组

一种&#xff1a;/**# encoding: utf-8# 版权所有 2025 ©涂聚文有限公司™ # 许可信息查看&#xff1a;言語成了邀功盡責的功臣&#xff0c;還需要行爲每日來值班嗎# 描述&#xff1a; 数组# Author : geovindu,Geovin Du 涂聚文.# IDE : DevEco Studio 5.1.1 …

Spring Boot 3整合Spring AI实战:9轮面试对话解析AI应用开发

Spring Boot 3整合Spring AI实战&#xff1a;9轮面试对话解析AI应用开发 第1轮&#xff1a;基础配置与模型调用 周先生&#xff1a;cc&#xff0c;先聊聊Spring AI的基础配置吧。如何在Spring Boot 3项目中集成Ollama&#xff1f; cc&#xff1a;我们可以通过OllamaConfig.java…

标准SQL语句示例

一、基础操作1. 数据库操作-- 1. 创建数据库 CREATE DATABASE 数据库名称 CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;-- 2. 删除数据库 DROP DATABASE IF EXISTS 数据库名称;-- 3. 选择数据库 USE 数据库名称;-- 4. 显示所有数据库 SHOW DATABASES;-- 5. 查看数据库创…

STM32-基本定时器

一.基本定时器简介 STM32F1 系列共有 8 个定时器&#xff0c;分别为&#xff1a;基本定时器、通用定时器、高级定时器。基本定时器 TIM6 和 TIM7 是一个 16 位的只能向上计数的定时器&#xff0c;只能定时&#xff0c;没有外部IO。 二.基本定时器功能 上图为基本定时器的功能框…

ofd文件转pdf

主要后端使用Java实现&#xff0c;前端可随意搭配http请求添加依赖&#xff1a;<!-- OFD解析与转换库 --><dependency><groupId>org.ofdrw</groupId><artifactId>ofdrw-converter</artifactId><version>1.17.9</version></…

4.应用层自定义协议与序列化

1.应用层程序员写的一个个解决我们实际问题, 满足我们日常需求的网络程序, 都是在应用层1.1再谈“协议”协议是一种 "约定". socket api 的接口, 在读写数据时, 都是按 "字符串" 的方式来发送接收的. 如果我们要传输一些 "结构化的数据" 怎么办呢…

【QT搭建opencv环境】

本文参考以下文章&#xff1a; https://blog.csdn.net/weixin_43763292/article/details/112975207 https://blog.csdn.net/qq_44743171/article/details/124335100 使用软件 QT 5.14.2下载地址&#xff1a;download.qt.io 选择版本&#xff1a;Qt 5.14.2 Qt 5.14.2百度网盘链接…

golang--函数栈

一、函数栈的组成结构&#xff08;栈帧&#xff09; 每个函数调用对应一个栈帧&#xff0c;包含以下核心部分&#xff1a; 1. 参数区 (Arguments) 位置&#xff1a;栈帧顶部&#xff08;高地址端&#xff09;内容&#xff1a; 函数调用时传入的参数按从右向左顺序压栈&#xff…

【FAQ】创建Dynamics 365 Sales环境

参考文章&#xff1a;5 分钟内安装 Dynamics 365 Sales 步骤 1&#xff1a;访问 Power Platform 管理中心 导航到make.powerapps.com&#xff0c;然后点击右上角的齿轮图标。选择管理中心&#xff0c;或者访问aka.ms/ppac访问 Power Platform 管理中心。 第 2 步&#xff1a…

【数据库】使用Sql Server将分组后指定字段的行数据转为一个字段显示,并且以逗号隔开每个值,收藏不迷路

大家好&#xff0c;我是全栈小5&#xff0c;欢迎来到《小5讲堂》。 这是《Sql Server》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解。 温馨提示&#xff1a;博主能力有限&#xff0c;理解水平有限&#xff0c;若有不对之处望指正&#xff01; 目录前言示例数据集数…

7.项目起步(1)

1&#xff0c;项目起步-初始化项目并使用git管理创建项目并精细化配置src目录调整git 管理项目2项目起步-配置别名路径联想提示什么是别名路径联想提示如何进行配置 &#xff08;自动配置了&#xff09;{"compilerOptions" : {"baseUrl" : "./",…