目录
- 一、进制表示与转换
- (一)不同进制表示
- (二)进制转换方法
- 二、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 |
尤其要注意十六进制中,有一些是用大写英文字母代替的,如下:
十六进制表示 | 对应数字 |
---|---|
A | 10 |
B | 11 |
C | 12 |
D | 13 |
E | 14 |
F | 15 |
(一)不同进制表示
我们数学默认是十进制(逢十进一)表示,而计算机是采用二进制的,如果我们想在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 码: