C03_进制转换和ASCII码

进制说明

  1. 进制就是进位计数制的简称,是人为定义的带进位的计数方法.
  2. 对于任何的一种进制, X进制,表示每一个数位上的数运算时都是逢X进一位
  3. 例如: 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进制转换为十进制

  1. 对于数字部分从右往左编号为0到n,第i个数字位表示为di,这个数字就是dn…d1d0
  2. 每一个数字都有一个权值
  3. 第i个数字位的权值为x^i
  4. 结果就是 sum(di*x^i)

2. 十进制转换为X进制

  1. 进制就是进制的幂次方*权重然后求和.
  2. 一个数移动有x^0这部分,也就是最右边的数.这个数可以通过除以X的余数得到.
  3. 比如最右边的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. 它是一套编码系统
  2. 由于计算机用高电平和低电平分别表示1和0,所以再计算机中所有的数据的存储方式都是二进制数表示,例如,想a-z,A-Z这样的52个字母以及0-9的数字还有一些常用的符号等.在计算集中存储的时候也要使用二进制数来表示,具体用哪些二进制数字表示哪个字符,每个人都可以约定自己的一套规则,这就叫编码
  3. 即 一个数字 和 一个字符的 一一映射
  4. 为了通信而不造成混淆,所以需要所有人都使用相同的规则

ASCII码的表示方式

  1. ASCII码使用指定的7位或者8位二进制数组合来表示128或者256种可能的字符
  2. 标准的ASCII码,使用7位二进制数(剩下的1位二进制为0)来表示所有的大写和小写字母,数字0到9,标点符号,以及在英文中使用的特殊控制字符
  3. 简单的来说就是一个数字对应一个字符
编码范围 表示
[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码的运算

  1. ASCII码可以当成整数和数字进行运算
  2. 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;
}

结果:

Guess you like

Origin blog.csdn.net/Fioman_GYM/article/details/121873892