作者:余小小
日期:2021-10-02
-
进制也就是进位制,是人们规定的一种进位方法。
-
对于任何一种进制—X进制,就表示某一位置上的数运算时是逢X进一位。
-
十进制是逢十进一, 十六进制是逢十六进一, 二进制就是逢二进一,以此类推,x进制就是逢x进位。
简单的理解,就是七个龙珠抽神龙,凑齐了七个龙珠,送你一条龙。
计算机认识的进制
在计算机中,传说只认识0和1,但是为啥认识我们在c语言编写的语句呢。
c语言其实是高级计算机语言,类似的高级语言有很多,比如Java,python,c++等等。
那么,计算机在将高级语言进行识别的时候,是将高级语言,翻译成低级语言,比如汇编,然后再将汇编语言翻译成0和1代码。
所谓的0和1代码,表示了短路和通路,就类似与灯的一开一关
学过车的小伙伴都知道,我们考试的时候,有一个灯光考试,什么双闪,超车灯光等等操作,其实就是操作灯光的开合来达到语言的目的
那么计算机也是通过0和1的变化来识别你要想计算机传达的命令,比如打印字符串,当然,过程是很快的
所以,计算机只能识别二进制
常用的进制的分类
-
二进制
-
八进制
-
十进制
-
十六进制
那么有三进制,四进制,5进制嘛,当然有了,那么有1进制嘛。。。抠脑壳
二进制binary
参考:
二进制(binary)是在和中指以2为基数的记数系统,是以2为基数代表系统的二进位制。
为啥说是2进制呢?还不是因为只有2个数字来表达的一种方式,这两个数字就是0,1;
你觉得怎么好好理解就怎么来就是咯
为啥是0和1?不是0和2;
这里我是这样理解的,计算机基础里说过,计算机起源有哪些?当然是电子管、晶体管、集成电路、大规模集成电路;(后缀都有个计算机)
所以我们个人计算机就是集成电脑计算机咯。
大规模的集成电路计算机就理解成大型的服务器吧。那种藏在水池子或者山里的那种,或者是那个超级电脑。
当然啥是超级计算机?就是计算超大数字计算的很快很快那种,大的要很多个房间又特别吃点电的那种;
好了, 为啥是0和1,这样子理解,计算机里都是从0开始计数的。0到1也就是2位数,所以说2进制只有0和1咯。如果是由0、1、2组成的当然是交3进制咯,因为有3个数嘛
在c语言里,好像是不能直接执行二进制代码的,因为没有找到二进制的占位符。所以并不能直接输出具体的二进制在控制台上。
但是可以定义相关的2进制变量,使用时必须以0b
或0B
(不区分大小写)开头
#include <stdio.h>
int main() {
printf("%d\n",0b101);
return 0;
}
我这里直接输出的是int整形的占位符,所以c语言是会帮我把2进制进行转换的,不是说2进制就不能用了。只不过我没有找到相关的占位符来将其输出,如果有其他方式能展示二进制的小伙伴可以分享一下。当然,有其他的手段将二进制弄成字符串来输出,但是这个没必要研究。
标准的c语言是不支持直接操作二进制的数据的。有些编译器自己进行了扩展,才支持二进制数字
八进制Octal
参考:
八进制,Octal,缩写OCT或O,一种以8为基数的,采用0,1,2,3,4,5,6,7八个数字,逢八进1。
简单理解:
-
之前介绍了啥是2进制,当然这里为啥要叫8进制呢,很明显是有8个数啊。
-
是哪8个呢? 你从0开始自己数8个呗;当然是0~7咯。
-
为了和10进制区分(因为10里面也有0到7嘛),八进制是以数字零开头;所以用开头是0的来区分。
八进制由 0~7 八个数字组成,使用时必须以0
开头(注意是数字 0,不是字母 o)
#include <stdio.h>
int main() {
printf("%d\n",0b101);
printf("---------------分割线------------------\n");
printf("%o\n",007);
printf("%ho\n",007);
printf("%lo\n",007);
return 0;
}
八进制的占位符:(全部是小写字母)
-
%ho:对应short
-
%o:对应int
-
%lo:对应long
但是我上面都是直接传入的八进制的值的,那么是啥类型呢,其实都是可以用的,但是要讲究规范。默认传入的应该是int类型
十进制decimal system
参考:
全世界通用的十进制,满十进一,满二十进二
简单理解:
-
当然综上所述当然是由0到9来表示咯。为了区分,就没有给他设置前缀咯
十进制占位符:(全部是小写字母)
-
%hd:对应short
-
%d:对应int
-
%ld:对应long
#include <stdio.h>
int main() {
printf("%d\n",0b101);
printf("---------------分割线------------------\n");
printf("%o\n",007);
printf("%ho\n",007);
printf("%lo\n",007);
printf("---------------分割线------------------\n");
printf("%d\n",888);
printf("%hd\n",888);
printf("%ld\n",888);
return 0;
}
十六进制Hexadecimal
参考:
是一种逢16进1的。通常用数字0、1、2、3、4、5、6、7、8、9和字母A、B、C、D、E、F(a、b、c、d、e、f)表示,其中:A~F表示10~15,这些称作十六进制数字。
简单理解:
-
综上所述。
当然是0到15来表示咯,你想多咯,如果是这样怎么区分呢?所有很腻害的来了,前面的10个数还是用10进制的方式来表达,后面的6个数呢?当然用abcdef啊。为啥是6个字母。因为没有10,为啥没有10?因为2进制的时候就用了10了啊,而且很容易和10进制起冲突 -
所以呢前面的10个数依旧是0~9,后面的6个数,a~f。为了区分,给了她一个前缀0x(ling埃克斯)
十六进制由数字 0~9、字母 A~F 或 a~f(不区分大小写)组成,使用时必须以0x
或0X
(不区分大小写)开头,是数字0和字母x
十六进制占位符:
-
%hx 或者 %hX:对应short
-
%x 或者 %X:对应int
-
%lx 或者 %lX:对应long
#include <stdio.h>
int main() {
printf("%d\n",0b101);
printf("---------------分割线------------------\n");
printf("%o\n",007);
printf("%ho\n",007);
printf("%lo\n",007);
printf("---------------分割线------------------\n");
printf("%d\n",888);
printf("%hd\n",888);
printf("%ld\n",888);
printf("---------------分割线------------------\n");
printf("%x\n",0x5a);
printf("%hx\n",0x5b);
printf("%lx\n",0x5c);
return 0;
}
暂无评论内容