文章目录
- 进制说明
- 常用进制
- 二进制
- 三进制
- 四进制
- 十进制
- 计算机中的进制
- 1. 二进制
- 八进制
- 十六进制
- 进制转换
- 1. X进制转换为十进制
- 2. 十进制转换为X进制
- ASCII码的定义
- ASCII码的表示方式
- ASCII码的输出
- 数字的方式输出
- ASCII码的运算
进制说明
- 进制就是进位计数制的简称,是人为定义的带进位的计数方法.
- 对于任何的一种进制, X进制,表示每一个数位上的数运算时都是逢X进一位
- 例如: 10进制是缝10进一位,十六进制是逢十六进一,二进制就是逢二进一,理论上来说没有1进制,如果是1进制,逢1就进1,那么就拿1来说,就会进入到无限循环当中.
常用进制
二进制
逢2进1
三进制
逢3进1
四进制
逢4进1
十进制
逢10进1,我们日常中使用的进制
计算机中的进制
1. 二进制
C语言中,如果我们想要表示一个二进制数,可以用
0b
作为前缀,然后跟上0和1组成的数字.
#include <stdio.h>
int main(void)
{
int a = 0b101; // 声明一个二进制数
printf("%d\n",a);
return 0;
}
结果:
八进制
八进制的数据在C语言里面前面是有一个
0
来表示,然后后面跟上0-7的数字.
C语言中%d
,对应的是输出10进制数
#include <stdio.h>
int main(void)
{
int a = 0123; // 1 * 8^2 + 2 * 8^1 + 3 * 8^0
printf("%d\n",a);
return 0;
}
结果:
十六进制
十六进制表示方式为:
0x后者0X
作为前缀,跟上0-9,a-f,A-F数字,a-f或者A-F表示10-15这六个数
#include <stdio.h>
int main()
{
int a = 0X123; // a = 1 * 16^2 + 2 * 16^1 + 3 * 16^0
printf("%d\n", a);
return 0;
}
结果:
进制转换
1. X进制转换为十进制
- 对于数字部分从右往左编号为0到n,第i个数字位表示为di,这个数字就是dn…d1d0
- 每一个数字都有一个权值
- 第i个数字位的权值为x^i
- 结果就是 sum(di*x^i)
2. 十进制转换为X进制
- 进制就是进制的幂次方*权重然后求和.
- 一个数移动有x^0这部分,也就是最右边的数.这个数可以通过除以X的余数得到.
- 比如最右边的x^0,部分的求法,就是用 num 除以 2,然后余数是多少,比如10来表示二进制
10 / 2 余数是0,就表示最后一位是0,然后得到的结果是5,5 再对2取余,结果是1,放到倒数第二位,
整除的部分是2,2再对2取余结果是0,整除的部分是1. 所以10的二进制的结果就是 1010 2^3 + 2 ^1
ASCII码的定义
- 它是一套编码系统
- 由于计算机用高电平和低电平分别表示1和0,所以再计算机中所有的数据的存储方式都是二进制数表示,例如,想a-z,A-Z这样的52个字母以及0-9的数字还有一些常用的符号等.在计算集中存储的时候也要使用二进制数来表示,具体用哪些二进制数字表示哪个字符,每个人都可以约定自己的一套规则,这就叫编码
- 即 一个数字 和 一个字符的 一一映射
- 为了通信而不造成混淆,所以需要所有人都使用相同的规则
ASCII码的表示方式
- ASCII码使用指定的7位或者8位二进制数组合来表示128或者256种可能的字符
- 标准的ASCII码,使用7位二进制数(剩下的1位二进制为0)来表示所有的大写和小写字母,数字0到9,标点符号,以及在英文中使用的特殊控制字符
- 简单的来说就是一个数字对应一个字符
编码范围 | 表示 |
[0,31], 127 | 0~31和127(共33个)是控制字符或者通信专用字符,常见的控制符: LF(换行),CR(回车),DEL(删除),BS(退格)等等,通信专用字符:SOH(文头),ACK(确认)等等 |
[48,57]] | 数字0到9 |
[65,90] | 大写字母A到Z |
[97,122] | 小写字母a到z |
其他 | 空格,!,",#,+,-,%等标点符号或者运算符 |
ASCII码的输出
ASCII码对应的字符用单引号括起来,并且是可以按照两种方式来输出的,分别为: 字符形式和整数形式
字符
#include <stdio.h>
int main()
{
printf("%c\n", '0');
printf("%c\n", 'A');
printf("%c\n", 'a');
printf("%c\n", '$');
return 0;
}
结果:
数字的方式输出
#include <stdio.h>
int main()
{
printf("%d\n",'A');
printf("%d\n",'0');
printf("%d\n",'a');
printf("%d\n",'%');
return 0;
}
结果:
ASCII码的运算
- ASCII码可以当成整数和数字进行运算
- ASCII码可以进行比较,但是比较是按照ASCII码的整数值的大小来进行比较的.
#include <stdio.h>
int main()
{
char a = 'a';
char b = 'A';
char c;
c = a + 1;
printf("%d,%d\n",a,b);
printf("%d\n",a > b); // 所以C语言中ASCII码对比的是ASCII码的整数值,所以'a' > 'A'
printf("%c\n",c);
return 0;
}
结果: