C++语言程序设计——03 进制ASCII码

目录

  • 一、进制表示与转换
    • (一)不同进制表示
    • (二)进制转换方法
  • 二、ASCII 码
    • (一)ASCII 码表
    • (二)ASCII 码转换
    • (三)大小写英文字母转换
    • 【总结:如何记忆ASCII 码】

一、进制表示与转换

一般有以下常见的进制表示,例如,二进制、八进制、十进制和十六进制。要注意是从0开始,可以简单描述为逢X进1(X为2、8、10、16),如下表:

类型写法
二进制0、1
八进制0、1、2、3、4、5、6、7
十进制0、1、2、3、4、5、6、7、8、9
十六进制0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F

尤其要注意十六进制中,有一些是用大写英文字母代替的,如下:

十六进制表示对应数字
A10
B11
C12
D13
E14
F15

(一)不同进制表示

我们数学默认是十进制(逢十进一)表示,而计算机是采用二进制的,如果我们想在c++中表示其他进制,需要在数字前添加别的东西,才能表示该进制的写法。例如,以15为例子,如下:

类型写法备注
十进制15无前缀
八进制017加前缀【0
二进制0b1111加前缀【0b
十六进制0xF加前缀【0x

(二)进制转换方法

1、输出为十进制
输出为十进制是通过控制符dec(decimalism,十进制)来实现的,例如以下代码:

#include<iostream>
using namespace std;int main()
{cout << "017八进制转十进制输出:" << dec << 017 << endl;cout << "0b1111二进制转十进制输出:" << dec << 0b1111 << endl;cout << "0xF十六进制转十进制输出:" << dec << 0xF << endl;return 0;
}

运行结果如下:
在这里插入图片描述
2、输出为八进制
输出为八进制是通过控制符oct(Octal Q,八进制)来实现的,例如以下代码:

#include<iostream>
using namespace std;int main()
{cout << "15十进制转八进制输出:" << oct << 15 << endl;cout << "0b1111二进制转八进制输出:" << oct << 0b1111 << endl;cout << "0xF十六进制转八进制输出:" << oct << 0xF << endl;return 0;
}

运行结果如下:
在这里插入图片描述
3、输出为十六进制
输出为八进制是通过控制符hex(hexadecimal,十六进制)来实现的,例如以下代码:

#include<iostream>
using namespace std;int main()
{cout << "15十进制转十六进制输出:" << hex << 15 << endl;cout << "0b1111二进制转十六进制输出:" << hex << 0b1111 << endl;cout << "017八进制转十六进制输出:" << hex << 017 << endl;return 0;
}

运行结果如下:
在这里插入图片描述
4、输出为二进制
输入二进制需要先导入一个 < bitset > 头文件,然后通过bitset来实现,如果是要转换为八位,即bitset<位数>(数字)。下面是示例代码:

#include<iostream>
#include<bitset> 
using namespace std;int main()
{cout << "15十进制转二进制输出:" << bitset<8>(15) << endl;cout << "017八进制转二进制输出:" << bitset<8>(017) << endl;cout << "0xF十六进制转二进制输出:" << bitset<8>(0xF) << endl;return 0;
}

运行结果如下:
在这里插入图片描述

二、ASCII 码

(一)ASCII 码表

对于计算机中非数值信息(字母、符号、控制字符等),它们也是通过二进制0和1进行编码来显示的,通常采用的是ASCII编码。简单的来说,ASCII码是计算机中的「字符字典」,相当于给每个常用的字母、符号等都编了号,从而让计算机能理解。因为,计算机只认识0和1(二进制),所以ASCII码可以帮我们把字母等变成二进制数字。
在这里插入图片描述
ASCII码一共定义了128个字符(后来扩展成256个),主要包含以下内容:
①英文字母(大小写)
②数字0~9
③标点符号(!@#¥%*等)
④控制字符(回车、换行等)
在这里插入图片描述

(二)ASCII 码转换

在c++中,我们使用char()int()进行显式类型转换,进行ASCII字符与对应编码值之间的转换,如下:

类型作用
int(数字)数字 → 字符
char(字符)字符 → 数字

例如,我们知道大写英文字母 A ,而它的ASCII码为65,就可以通过char()将数字转换为字符,同理,我们将字符 A 转换为对应的ASCII码,如下代码:

#include<iostream>
using namespace std;int main()
{int a = 100;char b = 'A';cout << "变量a对应的字符:" << char(a) << endl;cout << "变量b的ASCII码是:" << int(b);return 0;
}

运行结果如下:
在这里插入图片描述

(三)大小写英文字母转换

另外,如果如果我们想让英文字母大小写进行转换,可以通过数字增加和减少来实现(大写字母ASCII码比小写字母小32),得到相应字母的ASCII码:

#include <iostream>               //头文件
using namespace std;              //命名空间
int main()                        //主函数
{char a = 'A';cout << a + 32;return 0;
}

运行结果如下:
在这里插入图片描述
另外,我们也可以通过tolower() 和toupper() 函数会自动处理字符的 ASCII 码转换,无需手动计算差值,需要包含以下头文件:

#include <cctype>
名称函数
大写转小写tolower()
小写转大写toupper()

例如,我们将小写字母转换为大写字母,使用toupper()函数:

#include <iostream>
#include <cctype>  // 包含toupper()函数的头文件
using namespace std;int main() 
{char n1 = 'a';char n2 = toupper(n1);cout << n2;return 0;
}

运行结果如下:
在这里插入图片描述
还有一种利用 ASCII 码差值以及位运算的方法,可以更高效:

#include <iostream>
#include <cctype>  // 包含toupper()函数的头文件
using namespace std;int main() 
{char c;cin >> c;if (c >= 'a' && c <= 'z')  // 小写字母转大写cout << (char)(c & 0xDF);   //等价于 c - 32,位运算更快else if (c >= 'A' && c <= 'Z')  // 大写字母转小写cout << (char)(c | 0x20);  //等价于 c + 32else  // 非字母字符直接输出cout << c;return 0;  // 程序正常退出
}

运行结果如下:
在这里插入图片描述

【总结:如何记忆ASCII 码】

➡️1、首先,我们要知道ASCII 码一共有128个(0~127),其中包含控制字符和可显示字符。

例如,换行、回车这些是控制字符,空格、数字、字母等是可显示字符。

➡️2、常用的包括可显示字符,即数字、大写字母和小写字母,记住三个基准。

名称基准
数字0 → 48
大写字母A → 65
小写字母a → 97

例如,对于数字,0~9 是依次增加的顺序,如果我们要计算数字1的ASCII 码,通过数字0的ASCII 码是48,即数字1的ASCII 码是 48+1=49。

例如,对于大写字母,A~Z 是依次增加的顺序,如果我们要计算大写字母B 的ASCII 码,通过大写字母A 的ASCII 码是65,即大写字母B 的ASCII 码是 65+1=49。

例如,对于小写字母 ,a~z 是依次增加的顺序,如果我们要计算小写字母b 的ASCII 码,通过小写字母b 的ASCII 码是97,即小写字母b 的ASCII 码是 97+1=98。

➡️3、大小写字母直接加减转换

名称方法
大写转小写大写字母 ASCII 码 + 32
小写转大写小写字母 ASCII 码 - 32

例如,‘a’ (97) - 32 = 65 → ‘A’

➡️4、记住两个特殊字符
空格(’ '):ASCII 码 = 32(是可显示字符的第一个,常用来判断 “非字符”)。
例如,

换行符(‘\n’):ASCII 码 = 10(控制字符中最常用,用于换行输出)。

➡️5、其余的ASCII码不用记忆,直接通过int()进行转换即可。

#include <iostream>
using namespace std;
int main()
{char a = '5';cout << int(a);return 0;
}

运行结果如下,直接输出数字5的ASCII 码:
在这里插入图片描述

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

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

相关文章

AtCoder Beginner Contest 420-Toggle Maze

题目描述 有一个 H行 W 列的网格。用 (i,j) 表示位于第 i 行&#xff08;从上往下数&#xff09;第 j 列&#xff08;从左往右数&#xff09;的格子。每个格子的状态用字符 Ai,j表示&#xff0c;含义如下&#xff1a; . &#xff1a;空格子。 #’ &#xff1a;障碍格子。 S &am…

20、DMA----释放CPU压力,加快传输

1、DMA介绍DMA&#xff0c;全称为&#xff1a;Direct Memory Access&#xff0c;即直接存储器访问。DMA传输方式无需CPU直接控制传输&#xff0c;也没有中断处理方式那样保留现场和恢复现场的过程&#xff0c;通过硬件为RAM与I/O设备开辟一条直接传送数据的通路&#xff0c;能使…

深入OpenHarmony OTA硬核升级

技术背景 OpenHarmony OTA(Over-The-Air)升级子系统为设备提供了远程升级能力,通过统一的升级接口屏蔽底层芯片差异,支持轻量系统、小型系统和标准系统的全量升级、差分升级和变分区升级。 核心特性 跨系统支持:覆盖轻量系统(Hi3861)、小型系统(Hi3516DV300)、标准系…

华为iVS1800接入SVMSPro平台

华为iVS1800接入SVMSPro平台 ** 华为好望Huawei HolosensIVS1800智能视频云平台采用首款昇腾310加持的嵌入式系统智能微边缘&#xff0c;独俱普惠AI鸿力。一台融合存储、计算、检索功能&#xff0c;满足小型园区、社区、银行网点、超市等场景安防需求&#xff0c;小机大智。 …

《异形战机2》v2.0.4数字豪华版,3D横版射击再临,机体武器海量升级

[游戏名称]: 《异形战机2》v2.0.4数字豪华版 [软件大小]: 17.7 GB [软件大小]: 夸克网盘 | 百度网盘 游戏介绍 《异形战机&#xff1a;最终版2》续作震撼登场&#xff01;经典横版射击全面升级&#xff1a;3D 画面炫目、关卡与机体海量扩充&#xff0c;只为带来酣畅淋漓的灭…

Java 异常(Throwable)

1. Throwable Throwable: 所有异常和错误的根类。实现 Throwable 或其子类的对象才能被 throw 或 catch。 Error: 表示严重的系统级问题&#xff0c;通常不应该被捕获或处理&#xff0c;程序通常无法从中恢复。 Exception: 表示程序可以处理的问题。分为 运行时异常、 受检异常…

rocketmq常用命令

官方文档 https://rocketmq.apache.org/zh/docs/ https://rocketmq.apache.org/zh/docs/domainModel/02topic/ https://rocketmq.apache.org/zh/docs/4.x/deployment/02admintool 集群配置管理 https://mp.weixin.qq.com/s/688wNSwZPraGvAnr0K7hRw RocketMQ运维管理命令mqadm…

【C++详解】哈希表概念与实现 开放定址法和链地址法、处理哈希冲突、哈希函数介绍

文章目录一、unordered系列的使用unordered_set类的介绍unordered_set和set的使⽤差异unordered_map和map的使⽤差异unordered_xxx的哈希相关接⼝二、哈希表实现哈希概念直接定址法哈希冲突负载因⼦将关键字转为整数哈希函数除法散列法/除留余数法乘法散列法处理哈希冲突开放定…

电影感人文街拍摆摊纪实摄影后期Lr调色教程,手机滤镜PS+Lightroom预设下载!

调色介绍电影感人文街拍摆摊纪实摄影后期 Lr 调色是一种专注于捕捉街头生活烟火气的摄影风格&#xff0c;通过 Lightroom 后期调色赋予画面电影般的叙事感和情感深度。这种风格以摆摊小贩、市井行人、街头场景为主体&#xff0c;强调真实、自然的生活瞬间。调色核心在于低饱和暖…

【数据分享】298个地级市人工智能企业数量(1990-2023)

数据介绍引言人工智能产业作为数字经济的核心驱动力&#xff0c;其发展规模与分布格局深刻反映区域科技创新活力与产业升级潜力。为助力相关研究&#xff0c;本文分享一份涵盖全国 298 个地级市 1990-2023 年的人工智能企业核心数据&#xff0c;包含人工智能企业存量和人工智能…

LeetCode 面试经典 150_双指针_验证回文串(25_125_C++_简单)(双指针)

LeetCode 面试经典 150_数组/字符串_验证回文串&#xff08;25_125_C_简单&#xff09;题目描述&#xff1a;输入输出样例&#xff1a;题解&#xff1a;解题思路&#xff1a;思路一&#xff08;双指针&#xff09;&#xff1a;代码实现代码实现&#xff08;思路一&#xff08;双…

无障碍辅助模块|Highcharts引领可访问数据可视化的交流

在现代数据可视化中&#xff0c;无障碍辅助技术已成为必不可少的一部分。对于视障人士或使用屏幕阅读器的用户来说&#xff0c;传统图表往往难以获取有效信息&#xff0c;而 Highcharts 在设计之初便充分考虑了无障碍体验。 Highcharts作为可访问数据可视化的倡导者&#xff0…

从0到1:数据库进阶之路,解锁SQL与架构的奥秘

目录一、SQL 基础启航1.1 SQL 基础语法1.2 SQL 进阶查询1.3 SQL 实战案例分析二、分库分表实战2.1 分库分表的背景与原理2.2 分库分表策略设计2.3 分布式 ID 生成2.4 数据迁移方案三、中间件实战3.1 中间件概述3.2 DBLE 中间件实战3.3 MyCat 中间件实战四、高可用架构搭建4.1 高…

【数据结构入门】排序算法(2):直接选择排序->堆排序

目录 1.直接选择排序 1.1 思想 1.2 代码 2.堆排序 2.1 向下调整算法 2.1.1 代码 2.2 建堆 2.2.1 代码 2.3 正式排序 2.3.1 代码 3. 冒泡排序 3.1 思路 3.1.1 单趟排序 3.1.2 多趟排序 3.1.3优化 3.2 代码 1.直接选择排序 1.1 思想 每次从未排序区中选择一个最小…

Fluent Bit系列:字符集转码测试(下)

#作者&#xff1a;程宏斌 文章目录fluent-bit 1.9.4 转换测试结论接上篇&#xff1a;《Fluent Bit系列&#xff1a;字符集转码测试&#xff08;上&#xff09;》https://blog.csdn.net/qq_40477248/article/details/150776142?spm1001.2014.3001.5501fluent-bit 1.9.4 转换测试…

redis-缓存-持久化

redis-缓存-持久化一、来因宫1、啥叫持久化&#xff1f;为何需要持久化&#xff1f;2、redis持久化方案2.1、RDB - 快照持久化A、定义原理B、快照生成流程&#xff1a;Copy-on-Write&#xff08;写时复制&#xff09;C、dump.rdb文件说明D、RDB 数据恢复流程E、RDB的优缺点2.2、…

C++11(Linux/GCC)字节序工具

#pragma once #include <cstdint> #include <climits> #include <type_traits> // 用于类型检查// 端序宏获取&#xff08;保持原有逻辑&#xff09; #if __has_include(<endian.h>)#include <endian.h> #elif __has_include(<bits/endian.h…

【MTCNN网络结构记忆卡片】--003nets.py

&#x1f9e0; MTCNN网络结构记忆卡片 &#xfffd;&#xfffd; 基础概念速查 &#x1f524; 库引入&#xff1a;import torch 和 import torch.nn as nn import torch # PyTorch深度学习框架 import torch.nn as nn # nn Neural Networks (神经网络)&#x1f3d7;️…

可视化-模块1-HTML-03

1.发现问题<p>大数据可视化技术及应用课程</p> <img src"pic/图片2.png" width"300" height"300"/><p></p><img />HTML 标签按闭合方式只分两类&#xff1a;双标签&#xff08;paired / container&#xff…

前端开发:详细介绍npm、pnpm和cnpm分别是什么,使用方法以及之间有哪些关系

目录 npm、pnpm和cnpm分别是什么 npm pnpm cnpm NPM包管理器 使用npm管理&#xff0c;创建/初始化项目 修改npm镜像&#xff08;npm源设置&#xff09; 基本命令 安装依赖项 下载特定版本的依赖 下载开发依赖 下载全局依赖&#xff08;全局安装&#xff09; 升级依赖项 根据依赖…