图片[1]yxqz了解计算机的进制yxqz小余塘

 

作者:余小小

日期:2021-10-02

 

关于进制

  1. 进制也就是进位制,是人们规定的一种进位方法。

  2. 对于任何一种进制—X进制,就表示某一位置上的数运算时是逢X进一位

  3. 十进制是逢十进一, 十六进制是逢十六进一, 二进制就是逢二进一,以此类推,x进制就是逢x进位。

简单的理解,就是七个龙珠抽神龙,凑齐了七个龙珠,送你一条龙。

计算机认识的进制

在计算机中,传说只认识0和1,但是为啥认识我们在c语言编写的语句呢。

c语言其实是高级计算机语言,类似的高级语言有很多,比如Java,python,c++等等。

那么,计算机在将高级语言进行识别的时候,是将高级语言,翻译成低级语言,比如汇编,然后再将汇编语言翻译成0和1代码。

所谓的0和1代码,表示了短路和通路,就类似与灯的一开一关

学过车的小伙伴都知道,我们考试的时候,有一个灯光考试,什么双闪,超车灯光等等操作,其实就是操作灯光的开合来达到语言的目的

那么计算机也是通过0和1的变化来识别你要想计算机传达的命令,比如打印字符串,当然,过程是很快的

所以,计算机只能识别二进制

常用的进制的分类

  1. 二进制

  2. 八进制

  3. 十进制

  4. 十六进制

那么有三进制,四进制,5进制嘛,当然有了,那么有1进制嘛。。。抠脑壳

(9 封私信 / 35 条消息) 有没有一进制?一进制下1+1=几? – 知乎 (zhihu.com)

二进制binary

参考:二进制_百度百科 (baidu.com)

二进制(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进制变量,使用时必须以0b0B(不区分大小写)开头

#include <stdio.h>
​
int main() {
   printf("%d\n",0b101);
   return 0;
}

 

我这里直接输出的是int整形的占位符,所以c语言是会帮我把2进制进行转换的,不是说2进制就不能用了。只不过我没有找到相关的占位符来将其输出,如果有其他方式能展示二进制的小伙伴可以分享一下。当然,有其他的手段将二进制弄成字符串来输出,但是这个没必要研究。

image-20210927170317142

标准的c语言是不支持直接操作二进制的数据的。有些编译器自己进行了扩展,才支持二进制数字

八进制Octal

参考:八进制_百度百科 (baidu.com)

八进制,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;
}

 

image-20210927171447320

 

八进制的占位符:(全部是小写字母)

  1. %ho:对应short

  2. %o:对应int

  3. %lo:对应long

但是我上面都是直接传入的八进制的值的,那么是啥类型呢,其实都是可以用的,但是要讲究规范。默认传入的应该是int类型

十进制decimal system

参考:十进制_百度百科 (baidu.com)

全世界通用的十进制,满十进一,满二十进二

简单理解:

  • 当然综上所述当然是由0到9来表示咯。为了区分,就没有给他设置前缀咯

十进制占位符:(全部是小写字母)

  1. %hd:对应short

  2. %d:对应int

  3. %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;
}
​

 

image-20210928154206330

十六进制Hexadecimal

参考:十六进制(一种计数方式)_百度百科 (baidu.com)

是一种逢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(不区分大小写)组成,使用时必须以0x0X(不区分大小写)开头,是数字0和字母x

十六进制占位符:

  1. %hx 或者 %hX:对应short

  2. %x 或者 %X:对应int

  3. %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;
}

 

文章版权声明 1、本网站名称:小余塘
2、本站永久网址:https://www.yxqz.top/
3、本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长QQ2457431511进行删除处理。
4、本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
5、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
6、本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容