【C语言】揭开计数制的面纱:深入浅出二进制及二进制计算
欢迎来到 CILMY23 的博客
🏆本篇主题为:揭开计数制的面纱:深入浅出二进制及二进制计算
🏆个人主页:CILMY23-CSDN博客
🏆系列专栏:Python | C++ | C语言 | 数据结构与算法 | 贪心算法 | Linux | 算法专题 | 代码训练营
🏆感谢观看,支持的可以给个一键三连,点赞收藏+评论。如果你觉得有帮助,还可以点点关注
本文前言
在C语言中,我们经常会对内存进行研究,其中不乏包括数据的存储,那最原始的数据还是要到二进制数,这就不得不补充一下我们的基础了,本篇博客主要补充数据存储篇(前篇:链接)中的各种计数制,包括二进制数,八进制数,十六进制数,十进制数,以及他们之间的相互转换,外加二进制数的四则运算。
一、生活中的计数制
在生活中,任何一个数通常都可以用两种不同的方法表示,一种是按“值”表示法,即选定某种进位的计数体制来表示某个数值,这就是计数制,简称数制
1.1 十进制
比如:
如果我们采用十进位计数制(简称:十进制,Decimal),它有10个数码,分别是0~9,当任何一位数比9大的时候,我们就会进位,原本的位就会从0开始计数,也是被称为“逢十进一”,
任何一个十进制数都可以用其幂的形式表示:
我们把这种情况也叫“按权展开”,显然通过这种展开,我们能很快发现一个规律,那就是小数点前的数字,只要按对应的数字*对应的幂就好了,十进位就是*10^(n-1),小数点后是10^(-n),这样全部加在一块,就构成一个十进制数了。
任何一个十进制数都可以表示成以下形式:
只不过我们一般写成右下角为D的形式:
其中,n,m为正整数,Ki为系数,是十进制10个数码中的某一个,10是进位基数,10^i是位权,所以我们通常计算的时候是按权展开
1.2 二进制
如果我们采用二进位计数制(简称:二进制,binary),它有2个数码,分别是0,1,当任何一位数比1大的时候,我们就会进位,原本的位就会从0开始计数,也是被称为“逢二进一”,
在计算机存储中,我们通常采用二进制,一个字节有八个比特位,也就是八个二进制位,每一位存放一个二进制数,用0,1表示
二进制存储表示:
每一个二进制数都可以按权展开转换成十进制数:
我们通常也写成B在右下角
式中,Ki为系数;2为进位基数;2^i是二进制数的位权,二进制数不同位数的位权分别为2^(n-1),……,2^0,……2^-10”。任意1个二进制数按位权展开,都可转换为十进制数这种转换方法称为多项式替代法
1.3 十六进制
如果我们采用十六进位计数制(简称:十六进制,hexadecimal),它有16个数码,分别是0~9,A~F,当任何一位数比15大的时候,我们就会进位,原本的位就会从0开始计数,也是被称为“逢十六进一”,
任何一个十六进制的数都可以用幂的形式表示:
十六进制和二进制的关系:
由于十六进制是16 = 2 ^ 4 ,所以每一个十六进制数就可以看作四个二进制数,这就是直接转换法。如果有不够四位的,就补0.
二、进制之间的相互转换
我们将通过这些题来了解二进制,十六进制,十进制是如何转换的。
2.1 十进制转换成二进制
29.625 的转换
解析如下:整数部分我们用除法,一直除以2,直到除到0或1为止 ,小数部分我们用乘法,每次乘一个2,取整数部分。
127.0625 的转换
按照同样的方法我们也可以写出127的整数部分,0111 1111,0.0625,小数部分: 0.0625 * 2 = 0.125 取整数部分 0,所以小数部分为: 0
综合起来,127.0625 的二进制数为: 1111111.0
2.2 二进制数转换成十进制数
(1) 101101.11010111
整数部分:
= 32 + 0 + 8 + 4 + 0 + 1 = 45
小数部分:
= 0.5 + 0.25 + 0 + 0.0625 + 0 + 0.015625 + 0.0078125 + 0.00390625= 0.83984375
综合起来,101101.11010111 的十进制数为: 45.83984375
(2)101011.101101
整数部分:
= 32 + 0 + 8 + 0 + 2 + 1 = 43
小数部分:
= 0.5 + 0 + 0.125 + 0.0625 + 0 + 0.015625 = 0.703125
综合起来,101011.101101 的十进制数为: 43.703125
我们对于二进制转换成十进制数的方法是按权展开
- 将二进制数分成整数部分和小数部分。
- 对于整数部分,从右到左依次乘以 2 的幂次,然后相加得到十进制整数部分。
- 对于小数部分,从左到右依次除以 2 的幂次,然后相加得到十进制小数部分。
- 将整数部分和小数部分相加,得到最终的十进制数。
2.3 二进制转换成十六进制
(1)100110.100111
整数部分:
因为四位二进制可以直接看作一个十六进制数,所以我们可以划分一下,不够的补0.
所以整数部分就可以写成26
小数部分: 1001 = 9,1100 = C
综合起来,100110.100111 的十六进制数为: 26.9C
(2) 101011101.1100111
整数部分: 0001,0101,1101 =1,5,D
小数部分: 1100,1110 = C,E
综合起来,101011101.1100111 的十六进制数为: 15D.CE
二进制和十六进制的转换是可以跳过中间这个十进制的过程的,这样可以简便我们的过程,如果我们在二进制换八进制的情况下,除了借用这个计算器啊以外,我们可以直接转成十进制,然后再转成八进制。
2.4 十六进制转换成二进制
(1) 3AD.6EB
整数部分: 3 = 0011, A = 1010, D = 1101
小数部分: 6 = 0110, E = 1110, B = 1011
综合起来,3AD.6EB 的二进制数为: 0011 1010 1101.0110 1110 1011
(2)6C2B.4A7
整数部分: 6 = 0110, C = 1100, 2 = 0010, B = 1011
小数部分: 4 = 0100, A = 1010, 7 = 0111
综合起来,6C2B.4A7 的二进制数为: 0110 1100 0010 1011.0100 1010 0111
总结:
无论是对于二进制,八进制,十六进制,我们都可以先统一转换成十进制,然后再转换成对应的进制数,除此之外,二进制也可以直接转换成十六进制,或者八进制(3个二进制一组),从效率上来讲,第二种方式快捷的多,好了,本期的进制就到这,我们下期见。
🛎️感谢各位同伴的支持,本期计数制专题就讲解到这啦,如果你觉得写的不错的话,可以给个一键三连,点赞,收藏+评论,可以的话还希望点点关注,若有不足,欢迎各位在评论区讨论。
部分内容参考书ISBN:978-7-111-52647-6