admin 管理员组文章数量: 887021
进制
前言: 二进制,回想起来还是当初刚学计算机导论的时候接触到的,貌似现在搞应用的cxy用的真的很少,也可能是我比较无知(滑稽),基本上都用C++,Java,Python等高级语言来开发程序,谁还用得到这个,它给我的第一感觉就是那些搞底层交互的程序该干的事儿,那闲话不多说了,今天就来讨论一下这个令人熟悉又陌生的知识吧。
那么介绍这么多了,什么是二进制呢?
二进制是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”,由18世纪德国数理哲学大师莱布尼兹发现。当前的计算机系统使用的基本上是二进制系统,数据在计算机中主要是以补码的形式存储的。计算机中的二进制则是一个非常微小的开关,用“开”来表示1,“关”来表示0。
信息数据的存储单位:
- 位(Bit):内存的最小单位
- 字节(Byte):数据存储的最小单位,1 Byte = 8 Bit
- 千字节(KB):1 Kb = 1024 Byte
- 兆字节(MB):1 Mb = 1024 Kb
- 吉字节(GB):1 Gb = 1024 Mb
- 太字节(TB): 1 Tb = 1024 Gb
关于“字节”和“位”,谁才是计算机中最小的单位呢?
解释一:内存中一个Bit一个Bit的操作,而程序交互设计为了一个Byte一个Byte的操作,对我们这些程序员而言就byte吧。
解释二:最小的存储单位是"位Bit",虽然一般程序语言中的数据类型最小单位为Byte,但是也通常提供”位运算“(C语言的教材里涉及了”位域“,虽然到现在我都不太懂)。
总结:这些零碎的知识点网上的解释各种各样,事后大家可以在查查资料,推荐《计算机组成原理》。
信息数据的表示系统:
- 二进制Bin 0~1组成
- 八进制Oct 0~7组成
- 十进制Dec 0~9组成
- 十六进制Hex 0~F组成
-
二进制 → \rightarrow →十进制
二进制转十进制可以通过多项式表示,以此类推,在这之后的“八进制”、“十六进制”同样如此,相信聪明的各位已经懂得举一反三了,就不再举例说明了。
例:将二进制1011转化为十进制表示
1011(Bin)
= 1* 2 3 2^3 23 + 0* 2 2 2^2 22 + 1* 2 1 2^1 21 + 1* 2 0 2^0 20
= 8 + 0 + 2 + 1
= 11(Dec)
(其中2是基数,2的指数变化范围:0~ 2 B i t − 1 2^{Bit-1} 2Bit−1,Bit为二进制的位数) -
十进制 → \rightarrow →二进制
- 常规方式(除2求余,逆序排列)
例:将十进制66转化为二进制表示
算式 商 余数
66/2 33 0
33/2 16 1
16/2 8 0
8/2 4 0
4/2 2 0
2/2 1 0
1/2 0 1
66(Dec)
= 0100 0010(Bin)
- 非常规方式(拆分数值,填补权值)
例:将十进制82转化为二进制表示
82
/ \
64 18
| |
2 6 {2^6} 26 2 4 + 2 1 {2^4 + 2^1} 24+21
82(Dec)
= 64 + 18
= 2 6 {2^6} 26 + 2 4 + 2 1 {2^4 + 2^1} 24+21
= 0101 0010(Bin) -
十进制 → \rightarrow →八进制
- 常规方式(除8求余,逆序排列)
例:将十进制72转化为八进制表示
算式 商 余数
72/8 9 0
9/8 1 1
1/8 0 1
72(Dec)
= 110(Oct)
- 非常规方式(拆分数值,指数排列)
例:将十进制102转化为八进制表示
102
/ \
64 38
| |
1 ∗ 8 2 {1*8^2} 1∗82 4 ∗ 8 1 + 6 ∗ 8 0 {4*8^1 + 6*8^0} 4∗81+6∗80
102(Dec)
= 64 + 38
= 8 2 {8^2} 82 + 4 ∗ 8 1 + 6 ∗ 8 0 {4*8^1 + 6*8^0} 4∗81+6∗80
= 146(Oct) -
十进制 → \rightarrow →十六进制
- 常规方式(除16求余,逆序排列)
例:将十进制96转化为十六进制表示
算式 商 余数
96/16 6 0
6/16 0 6
96(Dec)
= 60(Hex)
- 非常规方式(拆分数值,指数排列)
例:将十进制120转化为十六进制表示
120
/ \
112 8
| |
7 ∗ 1 6 1 {7*16^1} 7∗161 8 ∗ 1 6 0 {8*16^0} 8∗160
120(Dec)
= 112 + 8
= 7 ∗ 1 6 1 {7*16^1} 7∗161 + 8 ∗ 1 6 0 {8*16^0} 8∗160
= 78(Hex) -
二进制 → \rightarrow →八进制
八进制最大的数字是7转换成二进制是111,刚好占3个位,每三个二进制数位为一组,转成一个八进制数位,如果二进制高位不足3位时,用零填补。
例:将二进制1011001转化为八进制表示
1011001(Bin)
= 001 011 001
= 1 3 1(Oct) -
二进制 → \rightarrow →十六进制
十六进制最大的数字是F,即15转换成二进制是1111,刚好占4个位,每四个二进制数为一组,转成一个十六进制数位,如果二进制高位不足4位时,用零填补。
例:将二进制1000111111转化为十六进制表示
1000111111(Bin)
= 0010 0011 1111
= 2 3 F(Hex) -
八进制 → \rightarrow →二进制
既然每三个二进制数位可以组成一个八进制数位,那反过来思考,不就是一个八进制位可以拆分为三个二进制数位嘛。
例:将八进制161转化为二进制表示
161(Oct)
= 001 110 001(Bin)
这样是不是简单了不少呢,以前导论老师教我八进制 → \rightarrow →十进制 → \rightarrow →二进制,贼麻烦!!! -
十六进制 → \rightarrow →二进制
你八进制能省事,我十六进制也省。同理,每个十六进制数位拆分为四个二进制数位,直接上例子。
66CCFF(Hex)
=0110 0110 1100 1100 1111 1111(Bin) -
各进制的用途
聊了这么多,我都有些累了,要是没人看,就伤心透了。那么说了这么多,这些进制到底有什么用呢?
二进制:毋庸置疑的0和1,像平常编写的Java,C程序,机器无法直接识别,只有把程序翻译成机器语言,才能告诉计算机你要干什么。
八进制:不太清楚,这是我道听途说的,与Linux系统下的文件权限有关,感兴趣的同学可以研究一下。
十进制:666,1,0…这熟悉的数字,你有没有一丝丝感触呢,日常生活中随处可见嘛,不多说了。
十六进制:内存地址空间使用16进制数位表示,强大的IDE配上C语言,那简直无敌好嘛。 -
总结
本人水平有限,文中若有什么不妥,欢迎指出,我写此篇博客只是自己在学习过程中的一个小总结,如果你觉得本文不错,帮我点个赞!!!学了这么长时间,不如看看老婆放松一下。
本文标签: 进制
版权声明:本文标题:进制 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1688178764h188676.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论