解码C语言基础
注释
| 类型 | 语法 | 规则与场景 | 示例 |
|---|---|---|---|
| 单行注释 | // 注释内容 |
仅作用于行尾,适用于短注释(变量/单行代码说明) | // 定义用户年龄变量int age;printf("输入年龄:"); // 提示用户输入 |
| 多行注释 | /* 注释内容 */ |
可跨多行,适用于长注释(函数文档/代码块逻辑) | /** 函数名:add* 功能:计算两数之和* 参数:a、b为待加整数* 返回值:两个数的和(int类型)*/int add(int a, int b) { ... } |
main函数-程序的入口
主函数有且只有一个
main无参形式
/*
函数名:main
函数参数:无
函数返回值:
返回0:表示函数正常退出
返回非0:表示函数异常退出
*/
int main(void)
{
/* code */
return 0;
}
main有参形式
/*
函数名:main
函数参数:
argc:参数个数
argv:参数数组,每个参数是一个字符串
函数返回值:
返回0:表示函数正常退出
返回非0:表示函数异常退出
*/
int main(int argc, char const *argv[])
{
/* code */
return 0;
}
man帮助手册(九册)
提供命令、函数、系统调用、配置文件等的权威说明
1.Shell命令(默认已安装)
2.系统调用(函数手册 - 这些函数由系统内核直接提供)
3.库函数(函数手册 - 这些函数有标准库提供)
4.特殊文件(通常出现在/dev目录下)
5.文件的特殊格式或协定(例如/etc/passwd的格式)
6.游戏
7.杂项(例如一些宏定义)
8.系统管理员命令(通常只能由管理员执行)
9.非标准内核例程
系统只安装第一册,以下帮助信息一般需要用户自己手动安装
sudo apt-get install manpages
sudo apt-get install manpages-dev
sudo apt-get install manpages-posix
sudo apt-get install manpages-posix-dev
使用技巧
#查看指定命令/函数的手册(自动匹配优先章节)
man [名称] # 例:man cp、man malloc
#查看指定章节的内容
man [章节号] [名称] # 例:man 3 malloc、man 5 sshd_config
#搜索包含关键词的所有手册(-k 表示“keyword”)
man -k [关键词] # 例:man -k "file copy"(搜索与“文件复制”相关的命令)
常量与变量
C语言标准规定:用户有权利从内存中申请一块存储单元,并且用户可以对存储单元进行命名,要求用户提前说明申请的存储单元(单位以字节来计算)的大小,这样linux内核才会从内存中寻找一块合适的空间,并把这块空间的地址反馈给用户。

用户可以对linux内核提供的存储单元进行命名,然后linux内核会把用户的命名和存储单元的地址建立一个映射关系,这样用户就可以通过存储单元的名称来访问存储单元。
- 变量是程序运行中值可以动态变化的内存单元,需声明数据类型,用于存储临时结果、用户输入等可变数据。
- 常量是值一旦定义就不可修改的标识符,分为字面常量(直接写在代码中的值)和符号常量(用#define或const定义的有名字的常量),用于表示固定不变的数据(如 π 值、配置参数等)。
- 变量和常量也被称为标识符,对于标识符的命名必须遵循规则:标识符是由字母、数字、下划线以及美元符号$组成,并且标识符的第一个字符只能是字母或者下划线
| 特性 | 变量(Variable) | 常量(Constant) |
|---|---|---|
| 定义方式 | 数据类型 + 变量名(可初始化) 例: int num = 10; |
宏常量:#define 常量名 值例: #define MAX 100常变量: const 类型 常量名 = 值例: const float PI = 3.14f |
| 值的可修改性 | 运行中可通过赋值语句修改 例: num = 20; |
定义后不可修改,强行修改会编译报错 |
| 数据类型 | 必须显式声明类型(如 int、float) |
宏常量无类型; 常变量需显式声明类型 |
| 内存分配 | 定义时分配内存,存储在可读写区域 | 宏常量不分配内存(预处理阶段直接文本替换); 常变量分配内存(可能在只读区域) |
| 作用域 | 局部变量:函数/代码块内有效 全局变量:整个程序有效 |
宏常量无作用域(预处理全局替换); 常变量作用域与变量一致(局部/全局) |
| 生命周期 | 局部变量:函数/代码块执行期间存在 全局变量:程序运行期间一直存在 |
宏常量无生命周期(预处理阶段生效); 常变量生命周期与变量一致 |
| 初始化要求 | 局部变量可先声明后赋值(未初始化时为随机值) 全局变量未初始化时默认值为 0 |
必须在定义时初始化(否则无意义) |
| 典型用途 | 存储程序运行中可能变化的数据: - 临时计算结果 - 用户输入 - 循环计数器 - 程序状态标志 - 中间值 |
存储程序运行中固定不变的值: - 配置参数(如数据库连接字符串、API密钥) - 数学/物理常数(如π、重力加速度) - 枚举值/状态码(如错误码、菜单选项) - 魔法数字/字符串的字面量替代(提高可读性) - 标准值/阈值(如最大登录尝试次数、超时时间) |
作用域
| 作用域类型 | 定义位置 / 方式 | 有效范围(可见区域) | 生命周期(存在时间) | 核心特性 | 典型使用场景 |
|---|---|---|---|---|---|
| 局部变量 | 函数内部、{} 包裹的代码块(如 if/for 块) |
仅在定义它的函数或代码块内,出界后不可访问 | 函数 / 代码块执行时创建,执行结束后销毁(栈内存) | - 不同函数/块中可同名,互不干扰 - 未初始化时值为随机值 - 内存自动回收 |
函数内临时存储数据(如计算中间值、循环计数器 i) |
| 函数参数(形参) | 函数定义的参数列表中(如 void func(int x)) |
仅在当前函数内部有效,等同于函数的“局部变量” | 函数被调用时初始化,函数执行结束后销毁(栈内存) | - 由调用者传入的实参赋值 - 作用域与函数内局部变量一致 - 本质是函数的“输入接口” |
函数间传递数据(如向 add(a,b) 传递两个待加数值) |
| 全局变量 | 所有函数外部(通常在源文件开头) | 从定义位置开始,到整个源文件结束,所有函数可访问 | 程序启动时创建,程序退出时销毁(静态内存) | - 未初始化时默认值为 0 - 可通过 extern 关键字跨文件访问- 全程序共享 |
多个函数需共享的数据(如配置参数、全局状态标记,需谨慎使用以避免耦合) |
| 块作用域变量 | 内层代码块(如 { int b = 2; }) |
仅在定义它的内层代码块内,出块后不可访问 | 代码块执行时创建,执行结束后销毁(栈内存) | - 会屏蔽外层同名变量(局部/全局) - 进一步缩小变量作用范围,减少命名冲突 |
限制变量作用域(如 for 循环内的计数器 i,仅在循环块内使用,避免污染外部) |
注. 同名变量屏蔽规则:当不同作用域的变量同名时,内层作用域变量会屏蔽外层变量(优先级:块作用域 > 函数参数 > 局部变量 > 全局变量)。例如,函数内的局部变量会覆盖同名全局变量,内层代码块的变量会覆盖外层函数的同名变量。
基本数据类型
- 整型
| 类型声明 | 符号属性 | 占用内存(字节) | 取值范围(以对应系统位数为准) | 适用场景 |
|---|---|---|---|---|
char |
有符号 | 1 | -128 ~ 127 |
存储单个字符(ASCII 码) |
unsigned char |
无符号 | 1 | 0 ~ 255 |
存储无负数值(如颜色值、字节) |
short |
有符号 | 2 | -32768 ~ 32767 |
存储较小范围的整数 |
unsigned short |
无符号 | 2 | 0 ~ 65535 |
存储无负的小整数 |
int |
有符号 | 4 | -2147483648 ~ 2147483647 |
默认整数类型(最常用) |
unsigned int |
无符号 | 4 | 0 ~ 4294967295 |
存储非负整数(如计数、ID) |
long |
有符号 | 4(32 位系统)/ 8(64 位系统) | -2147483648 ~ 2147483647(32 位系统) |
存储较大范围的整数 |
unsigned long |
无符号 | 4(32 位系统)/ 8(64 位系统) | 0 ~ 4294967295(32 位系统) |
存储无负的大整数 |
long long |
有符号 | 8 | -9223372036854775808 ~ 9223372036854775807 |
存储极大范围的整数(C99 标准新增) |
unsigned long long |
无符号 | 8 | 0 ~ 18446744073709551615 |
存储无负的极大整数 |
- 浮点型
| 类型声明 | 占用内存(字节) | 有效数字位数 | 取值范围(近似) | 适用场景 |
|---|---|---|---|---|
float |
4 | 6~7 位 | ±3.4×10^-38 ~ ±3.4×10^38 |
单精度浮点数(内存占用小,精度要求低) |
double |
8 | 15~17 位 | ±1.7×10^-308 ~ ±1.7×10^308 |
双精度浮点数(默认浮点类型,精度要求高) |
long double |
8/12/16(因编译器/平台而异) | 18~19 位 | ±3.4×10^-4932 ~ ±1.1×10^4932 |
高精度浮点数(极少用,如科学计算) |
科学计数法
格式:系数 e/E 指数
- 系数是 “e/E” 之前的部分,必须是有效的浮点数形式,不能省略,支持整数 / 小数形式,可带正负号
- 指数是 “e/E” 之后的部分,必须是整数,不能省略,可带正负号
仅支持 float(单精度)和 double(双精度)
- 默认类型:科学计数法常量(如
1.23e4)默认是double; - 指定
float:需加后缀f(如1.23e4f)。
通过格式化函数实现,核心格式符为 %e/%E
- 输出(
printf):%e用小写 e,%E用大写 E,默认保留 6 位小数;可加%.N控制精度(如%.2e保留 2 位),例:printf("%.2e", 1234.5);输出1.23e+03; - 输入(
scanf):用%e读取科学计数法输入(支持 e/E),例:scanf("%e", &double_var);可读取1.23e4、5.6E-3。 - 注
- 精度误差:浮点数为二进制近似存储,科学计数法运算可能有舍入误差(如
0.1e1非精确 1),避免用==直接比较,小数点后每一位的权重是 2 的负整数次幂,从左到右(第 1 位到第 n 位)权重依次为2⁻¹、2⁻²、2⁻³ ... 2⁻ⁿ - 类型匹配:
scanf读float用%e,读double建议用%le(部分编译器兼容%e,但需严谨)。
- 精度误差:浮点数为二进制近似存储,科学计数法运算可能有舍入误差(如
- 布尔类型(头文件<stdbool.h>)
| 类型声明 | 占用内存(字节) | 取值范围 | 说明 |
|---|---|---|---|
bool |
1(通常) | true / false |
true 等价于整数 1,false 等价于整数 0 |
printf-标准输出
printf原型
/*
函数名:printf
函数参数:
format:格式化字符串
...:可变参数列表,对应格式说明符的具体值
函数返回值:
int 类型,成功时返回打印的字符总数
失败时返回负数
*/
int printf(const char *format, ...);
转义字符
方便快速查阅:
| 转义字符 | 含义(ASCII 值) | 描述(功能) | 示例及输出效果 |
|---|---|---|---|
\n |
换行(10) | 光标移至下一行开头 | printf("Hello\nWorld");输出: HelloWorld |
\t |
水平制表(9) | 光标移至下一个制表位(类似 Tab 键,通常 8 个字符宽) | printf("Name\tAge");输出: Name Age(中间为制表位空格,约 4 个字符宽) |
\r |
回车(13) | 光标移至当前行开头(不换行,后续字符会覆盖前行内容) | printf("Hello\rHi");输出: Hiello(“Hi” 覆盖 “Hello” 前两个字符) |
\b |
退格(8) | 光标回退一个字符(删除前一个字符的显示) | printf("Hello\bWorld");输出: HellWorld(“o” 被退格删除) |
\' |
单引号(39) | 在单引号字符串中表示单引号本身(避免被解析为字符串结束符) | printf('It\'s a cat');输出: It's a cat |
\" |
双引号(34) | 在双引号字符串中表示双引号本身(避免被解析为字符串结束符) | printf("He said \"Hi\"");输出: He said "Hi" |
\\ |
反斜杠(92) | 表示反斜杠本身(避免被解析为转义符前缀) | printf("Path: C:\\test");输出: Path: C:\test |
\0 |
空字符(0) | 字符串结束标志(不显示,用于标记字符串结尾,C/C++ 中自动添加) | char str[] = "abc\0def";输出 str 时显示:abc(遇 \0 终止) |
\v |
垂直制表(11) | 光标移至下一个垂直制表位(较少用,用于表格排版,效果依终端而定) | printf("Line1\vLine2");输出: Line1Line2(垂直对齐) |
\f |
换页(12) | 光标移至下一页开头(常用于打印文档分页,终端中多表现为换行或清屏) | 打印时触发换页,终端示例:printf("Page1\fPage2"); 输出分页内容 |
\ddd |
八进制数表示的字符 | ddd 为 1-3 位八进制数(0-7),对应 ASCII 码字符(如 \141 对应 a) |
printf("\141\142\143");输出: abc(八进制 141=97=a,142=98=b,143=99=c) |
\xhh |
十六进制数表示的字符 | hh 为 1-2 位十六进制数(0-9、a-f、A-F),对应 ASCII 码字符(如 \x61 对应 a) |
printf("\x61\x62\x63");输出: abc(十六进制 61=97=a,62=98=b,63=99=c) |
scanf
scanf原型
/*
函数名:scanf
函数参数:
format:格式化字符串
...:可变参数列表,指向用于存储输入数据的变量地址
函数返回值:
int 类型,成功时返回成功读取并赋值的变量个数
失败时返回EOF(通常为-1),遇到文件结束或错误时返回
*/
int scanf(const char *format, ...);
格式控制符
| 类型符 | 含义 | 示例 | 输出结果 |
|---|---|---|---|
%d |
十进制整数(int) |
printf("%d", 123); |
123 |
%u |
无符号十进制整数(unsigned) |
printf("%u", 123U); |
123 |
%x |
十六进制整数(小写) | printf("%x", 255); |
ff |
%X |
十六进制整数(大写) | printf("%X", 255); |
FF |
%o |
八进制整数 | printf("%o", 8); |
10 |
%f |
浮点数(float/double) |
printf("%f", 3.14); |
3.140000 |
%c |
单个字符(char) |
printf("%c", 'A'); |
A |
%s |
字符串(char*) |
printf("%s", "hello"); |
hello |
%p |
指针地址 | printf("%p", &a); |
0x7ffd8a5b9a3c |
%% |
输出 % 本身 |
printf("%%"); |
% |
附加格式修饰符
| 修饰符格式 | 含义说明 | 示例代码 | 输出结果(注:用“□”标记空格,便于查看对齐效果) |
|---|---|---|---|
%md |
输出宽度为 m(m 为正整数),不足宽度用空格填充,内容右对齐 |
printf("%5d", 10); |
□□□10(共5位,前补3个空格) |
%-md |
输出宽度为 m(m 为正整数),不足宽度用空格填充,内容左对齐 |
printf("%-5d", 10); |
10□□□(共5位,后补3个空格) |
%0md |
输出宽度为 m(m 为正整数),不足宽度用 0 填充(仅对数值有效) |
printf("%05d", 10); |
00010(共5位,前补3个0) |
%m.nf |
输出总宽度为 m,同时保留 n 位小数,不足总宽度用空格填充 |
printf("%8.2f", 3.14159); |
□□□□3.14(总8位,小数点后2位,前补4个空格) |
%.nf |
不限制输出宽度,仅指定保留 n 位小数(宽度随内容自适应) |
printf("%.3f", 3.14); |
3.140(仅保留3位小数,无空格填充) |
%*.*f |
输出宽度和小数位数由参数动态指定(第一个 * 对应宽度,第二个 * 对应小数位) |
printf("%*.*f", 8, 2, 3.14); |
□□□□3.14(效果同 %8.2f,参数依次传入宽度、小数位、数值) |
类型转换
类型转换是将一种数据类型的值转换为另一种数据类型的过程,主要用于不同类型数据之间的运算或赋值。
- 隐式类型转换
隐式类型转换由编译器自动完成,无需程序员干预,遵循 "低精度向高精度转换" 的原则(避免数据丢失) -
- 算术运算中的转换
不同类型数据参与运算时,自动转换为其中精度最高的类型
转换优先级(从低到高):char → short → int → unsigned int → long → unsigned long → long long → float → double → long double
- 算术运算中的转换
-
- 赋值运算中的转换
右值自动转换为左值的类型
若右值精度高于左值,可能导致数据截断或精度损失
- 赋值运算中的转换
-
- 函数调用中的转换
实参自动转换为形参的类型
- 函数调用中的转换
eg
#include <stdio.h>
int main() {
char c = 'A'; // 'A'的ASCII码为65
int i = 100;
float f = 3.14f;
double d = 2.718;
// 1. 算术运算转换
int result1 = c + i; // c自动转换为int(65 + 100 = 165)
double result2 = i + f; // i和f自动转换为double(100.0 + 3.14 = 103.14)
// 2. 赋值转换
int result3 = f; // f(3.14)转换为int(3),精度损失
float result4 = d; // d(2.718)转换为float(2.718f),可能损失精度
printf("c + i = %d\n", result1); // 输出:165
printf("i + f = %lf\n", result2); // 输出:103.140000
printf("f -> int = %d\n", result3); // 输出:3
printf("d -> float = %f\n", result4); // 输出:2.718000
return 0;
}
- 显示类型转换
显式类型转换由程序员手动指定,使用强制转换运算符实现,语法为:(目标类型) 表达式
eg
#include <stdio.h>
int main() {
float f = 3.14159f;
int i = 100;
double d = 2.71828;
// 强制转换示例
int num1 = (int)f; // 将float转换为int(3.14159 → 3)
float num2 = (float)d; // 将double转换为float(可能损失精度)
char ch = (char)i; // 将int转换为char(100 → 'd',ASCII码)
// 运算中的强制转换
float average = (float)10 / 3; // 10先转换为float,结果为3.333...
int area = (int)(3.14 * 5 * 5); // 先计算再转换,结果为78
printf("(int)3.14159 = %d\n", num1); // 输出:3
printf("(float)2.71828 = %f\n", num2); // 输出:2.718280
printf("(char)100 = %c\n", ch); // 输出:d
printf("(float)10/3 = %f\n", average); // 输出:3.333333
printf("(int)(3.14*5*5) = %d\n", area); // 输出:78
return 0;
}
进制转换
- 常见进制及表示符号
计算机领域常用进制包括:
| 进制 | 基数 | 数字范围 | 表示前缀(编程中) | 示例 |
|---|---|---|---|---|
| 二进制 | 2 | 0, 1 | 0b(如0b1010) |
1010(对应十进制 10) |
| 八进制 | 8 | 0~7 | 0(如012) |
12(对应十进制 10) |
| 十进制 | 10 | 0~9 | 无(默认) | 10(对应十进制 10) |
| 十六进制 | 16 | 0~9, A~F(10~15) | 0x(如0xA) |
A(对应十进制 10) |
-
十进制转其他进制(整数部分)
方法:除基取余,逆序排列
-
步骤:将十进制数反复除以目标进制的 “基数”,记录每次的余数,直到商为 0;最后将余数从后往前排列,即为结果。
-
十进制 → 二进制(基数 2)
例:将十进制
13转为二进制- 13 ÷ 2 = 6 余
1(最低位) - 6 ÷ 2 = 3 余
0 - 3 ÷ 2 = 1 余
1 - 1 ÷ 2 = 0 余
1(最高位) - 逆序排列余数:
1101→ 结果:0b1101
- 13 ÷ 2 = 6 余
-
十进制 → 八进制(基数 8)
例:将十进制
65转为八进制- 65 ÷ 8 = 8 余
1(最低位) - 8 ÷ 8 = 1 余
0 - 1 ÷ 8 = 0 余
1(最高位) - 逆序排列余数:
101→ 结果:0101
- 65 ÷ 8 = 8 余
-
十进制 → 十六进制(基数 16)
例:将十进制
255转为十六进制- 255 ÷ 16 = 15 余
15(即F,最低位) - 15 ÷ 16 = 0 余
15(即F,最高位) - 逆序排列余数:
FF→ 结果:0xFF
- 255 ÷ 16 = 15 余
-
-
十进制转其他进制(小数部分)
方法:乘基取整,顺序排列
-
步骤:将十进制小数反复乘以目标进制的 “基数”,记录每次乘积的整数部分(0 或基数内的数),直到小数部分为 0(或达到所需精度);最后将整数部分从前往后排列,即为结果。
-
十进制 → 二进制(基数 2)
例:将十进制
0.625转为二进制- 0.625 × 2 = 1.25 → 整数部分
1(最高位),剩余小数0.25 - 0.25 × 2 = 0.5 → 整数部分
0,剩余小数0.5 - 0.5 × 2 = 1.0 → 整数部分
1(最低位),剩余小数0 - 顺序排列整数:
101→ 结果:0b0.101
- 0.625 × 2 = 1.25 → 整数部分
-
注意:无限循环小数
部分十进制小数无法用有限位其他进制表示(如
0.1转二进制),需按精度截断:例:十进制0.1转二进制(取前 8 位)- 0.1×2=0.2→0;0.2×2=0.4→0;0.4×2=0.8→0;0.8×2=1.6→1
- 0.6×2=1.2→1;0.2×2=0.4→0;0.4×2=0.8→0;0.8×2=1.6→1
- 结果:
0b0.00011001(无限循环,实际为0.000110011...)
-
-
其他进制转十进制
方法:按权展开求和
-
整数部分:从右到左,第 n 位(起始 0)的权重为 “基数ⁿ”,数字 × 权重后求和;
-
小数部分:从左到右,第 n 位(起始 1)的权重为 “基数⁻ⁿ”,数字 × 权重后求和。
-
.二进制 → 十进制
例:二进制
1010.101转十进制- 整数部分:
1×2³ + 0×2² + 1×2¹ + 0×2⁰ = 8 + 0 + 2 + 0 = 10 - 小数部分:
1×2⁻¹ + 0×2⁻² + 1×2⁻³ = 0.5 + 0 + 0.125 = 0.625 - 总和:
10 + 0.625 = 10.625
- 整数部分:
-
-
八进制 → 十进制
例:八进制12.4转十进制
-
整数部分:
1×8¹ + 2×8⁰ = 8 + 2 = 10 -
小数部分:
4×8⁻¹ = 4×0.125 = 0.5 -
总和:
10 + 0.5 = 10.5 -
十六进制 → 十进制
例:十六进制
A.8转十进制(A=10)- 整数部分:
10×16⁰ = 10 - 小数部分:
8×16⁻¹ = 8×0.0625 = 0.5 - 总和:
10 + 0.5 = 10.5
- 整数部分:
-
二进制与八 / 十六进制快速转换
利用 “2 的整数次幂” 关系(3 位二进制 = 1 位八进制,4 位二进制 = 1 位十六进制),直接分组转换。
-
二进制 ↔ 八进制(3 位一组)
- 整数部分:从右向左每 3 位分组,不足补 0;
- 小数部分:从左向右每 3 位分组,不足补 0;
- 每组对应 1 位八进制数。
例:二进制
10110.1011转八进制- 整数:
10110→ 补 0 为010 110→ 对应2 6→ 整数部分26 - 小数:
1011→ 补 0 为101 100→ 对应5 4→ 小数部分54 - 结果:
26.54(八进制)
-
二进制 ↔ 十六进制(4 位一组)
- 整数部分:从右向左每 4 位分组,不足补 0;
- 小数部分:从左向右每 4 位分组,不足补 0;
- 每组对应 1 位十六进制数(10~15 用 A~F 表示)。
例:二进制
10110.1011转十六进制- 整数:
10110→ 补 0 为0001 0110→ 对应1 6→ 整数部分16 - 小数:
1011→ 无需补 0 → 对应B→ 小数部分B - 结果:
16.B(十六进制)
-
-
核心总结
-
十进制转其他进制:整数 “除基取余(逆序)”,小数 “乘基取整(顺序)”;
-
其他进制转十进制:按权展开求和(整数权正次幂,小数权负次幂);
-
二进制与八 / 十六进制:3 位 / 4 位一组直接转换,高效便捷;
-
注意:小数转换可能出现无限循环,需按精度截断(如浮点数存储)。
源码补码反码
| 编码方式 | 定义说明 | 正数表示规则 | 负数表示规则 | 示例(以 -3 为例,8 位) |
|---|---|---|---|---|
| 源码 | 直接用符号位和数值位表示的二进制形式,符号位(最高位)0 表示正,1 表示负 | 符号位为 0,数值位为二进制绝对值 | 符号位为 1,数值位为二进制绝对值 | 10000011 |
| 反码 | 正数与源码相同,负数是对源码的数值位按位取反(符号位不变)得到的编码形式 | 与源码相同(符号位 0,数值位不变) | 符号位为 1,数值位按位取反(0→1,1→0) | 11111100 |
| 补码 | 正数与源码相同,负数是对反码加 1(若有进位则丢弃)得到的编码形式,是计算机实际存储整数的方式 | 与源码相同(符号位 0,数值位不变) | 反码 + 1(若反码加 1 后有进位,直接丢弃) | 11111101 |
附- ASCII码
| 十进制 | 二进制 | 字符 | 说明(控制字符)/ 字符(可打印字符) | 十进制 | 二进制 | 字符 | 说明(控制字符)/ 字符(可打印字符) |
|---|---|---|---|---|---|---|---|
| 0 | 00000000 | NUL | 空字符 | 64 | 01100000 | @ | 艾特符号 |
| 1 | 00000001 | SOH | 标题开始 | 65 | 01100001 | A | 大写字母A |
| 2 | 00000010 | STX | 文本开始 | 66 | 01100010 | B | 大写字母B |
| 3 | 00000011 | ETX | 文本结束 | 67 | 01100011 | C | 大写字母C |
| 4 | 00000100 | EOT | 传输结束 | 68 | 01100100 | D | 大写字母D |
| 5 | 00000101 | ENQ | 询问字符 | 69 | 01100101 | E | 大写字母E |
| 6 | 00000110 | ACK | 确认字符 | 70 | 01100110 | F | 大写字母F |
| 7 | 00000111 | BEL | 响铃(告警) | 71 | 01100111 | G | 大写字母G |
| 8 | 00001000 | BS | 退格(Backspace) | 72 | 01101000 | H | 大写字母H |
| 9 | 00001001 | HT | 水平制表符(\t) | 73 | 01101001 | I | 大写字母I |
| 10 | 00001010 | LF | 换行(\n) | 74 | 01101010 | J | 大写字母J |
| 11 | 00001011 | VT | 垂直制表符 | 75 | 01101011 | K | 大写字母K |
| 12 | 00001100 | FF | 换页 | 76 | 01101100 | L | 大写字母L |
| 13 | 00001101 | CR | 回车(\r) | 77 | 01101101 | M | 大写字母M |
| 14 | 00001110 | SO | 移位输出 | 78 | 01101110 | N | 大写字母N |
| 15 | 00001111 | SI | 移位输入 | 79 | 01101111 | O | 大写字母O |
| 16 | 00010000 | DLE | 数据链路转义 | 80 | 01110000 | P | 大写字母P |
| 17 | 00010001 | DC1 | 设备控制1 | 81 | 01110001 | Q | 大写字母Q |
| 18 | 00010010 | DC2 | 设备控制2 | 82 | 01110010 | R | 大写字母R |
| 19 | 00010011 | DC3 | 设备控制3 | 83 | 01110011 | S | 大写字母S |
| 20 | 00010100 | DC4 | 设备控制4 | 84 | 01110100 | T | 大写字母T |
| 21 | 00010101 | NAK | 否定应答 | 85 | 01110101 | U | 大写字母U |
| 22 | 00010110 | SYN | 同步空闲 | 86 | 01110110 | V | 大写字母V |
| 23 | 00010111 | ETB | 传输块结束 | 87 | 01110111 | W | 大写字母W |
| 24 | 00011000 | CAN | 取消 | 88 | 01111000 | X | 大写字母X |
| 25 | 00011001 | EM | 媒体结束 | 89 | 01111001 | Y | 大写字母Y |
| 26 | 00011010 | SUB | 替换 | 90 | 01111010 | Z | 大写字母Z |
| 27 | 00011011 | ESC | 转义(Escape) | 91 | 01111011 | [ | 左方括号 |
| 28 | 00011100 | FS | 文件分隔符 | 92 | 01111100 | \ | 反斜杠 |
| 29 | 00011101 | GS | 组分隔符 | 93 | 01111101 | ] | 右方括号 |
| 30 | 00011110 | RS | 记录分隔符 | 94 | 01111110 | ^ | 插入符号 |
| 31 | 00011111 | US | 单元分隔符 | 95 | 01111111 | _ | 下划线 |
| 32 | 01000000 | (空格) | 空格 | 96 | 10000000 | ` | 反引号 |
| 33 | 01000001 | ! | 感叹号 | 97 | 10000001 | a | 小写字母a |
| 34 | 01000010 | " | 双引号 | 98 | 10000010 | b | 小写字母b |
| 35 | 01000011 | # | 井号 | 99 | 10000011 | c | 小写字母c |
| 36 | 01000100 | $ | 美元符号 | 100 | 10000100 | d | 小写字母d |
| 37 | 01000101 | % | 百分号 | 101 | 10000101 | e | 小写字母e |
| 38 | 01000110 | & | 和号 | 102 | 10000110 | f | 小写字母f |
| 39 | 01000111 | ' | 单引号 | 103 | 10000111 | g | 小写字母g |
| 40 | 01001000 | ( | 左括号 | 104 | 10001000 | h | 小写字母h |
| 41 | 01001001 | ) | 右括号 | 105 | 10001001 | i | 小写字母i |
| 42 | 01001010 | * | 星号 | 106 | 10001010 | j | 小写字母j |
| 43 | 01001011 | + | 加号 | 107 | 10001011 | k | 小写字母k |
| 44 | 01001100 | , | 逗号 | 108 | 10001100 | l | 小写字母l |
| 45 | 01001101 | - | 减号/连字符 | 109 | 10001101 | m | 小写字母m |
| 46 | 01001110 | . | 句号 | 110 | 10001110 | n | 小写字母n |
| 47 | 01001111 | / | 斜杠 | 111 | 10001111 | o | 小写字母o |
| 48 | 01010000 | 0 | 数字0 | 112 | 10010000 | p | 小写字母p |
| 49 | 01010001 | 1 | 数字1 | 113 | 10010001 | q | 小写字母q |
| 50 | 01010010 | 2 | 数字2 | 114 | 10010010 | r | 小写字母r |
| 51 | 01010011 | 3 | 数字3 | 115 | 10010011 | s | 小写字母s |
| 52 | 01010100 | 4 | 数字4 | 116 | 10010100 | t | 小写字母t |
| 53 | 01010101 | 5 | 数字5 | 117 | 10010101 | u | 小写字母u |
| 54 | 01010110 | 6 | 数字6 | 118 | 10010110 | v | 小写字母v |
| 55 | 01010111 | 7 | 数字7 | 119 | 10010111 | w | 小写字母w |
| 56 | 01011000 | 8 | 数字8 | 120 | 10011000 | x | 小写字母x |
| 57 | 01011001 | 9 | 数字9 | 121 | 10011001 | y | 小写字母y |
| 58 | 01011010 | : | 冒号 | 122 | 10011010 | z | 小写字母z |
| 59 | 01011011 | ; | 分号 | 123 | 10011011 | { | 左花括号 |
| 60 | 01011100 | < | 小于号 | 124 | 10011100 | | | 竖线 |
| 61 | 01011101 | = | 等号 | 125 | 10011101 | } | 右花括号 |
| 62 | 01011110 | > | 大于号 | 126 | 10011110 | ~ | 波浪号 |
| 63 | 01011111 | ? | 问号 | 127 | 01111111 | DEL | 删除(Delete) |

浙公网安备 33010602011771号