平时使用的数字都是由 0~9 共十个数字组成,例如 1、8、10、666、999 等,一个数字最多能表示九,如果要表示十、十一、二十九、一百等,就需要多个数字组合起来。

例如表示 5+8 的结果,一个数字不够,只能」进位「,用 13 来表示;这时」进一位「相当于十,」进两位「相当于二十。

因为逢十进一(满十进一),也因为只有 0~9 共十个数字,所以叫做十进位。十进位是在人类社会发展过程中自然形成的,它符合人们的思维习惯,我们平时使用的默认就是十进位的。

进位也就是进位制。进行加法运算时逢X进一(满X进一),进行减法运算时借一当X,这就是X进位,这种进位也就包含X个数字,基数为X。十进位有 0~9 共10个数字,基数为10,在加减法运算中,逢十进一,借一当十。其实就是我们小学老师教我们的加法和减法。

二进位

我们不妨将思维拓展一下,既然可以用 0~9 共十个数字来表示数值,那么也可以用0、1两个数字来表示数值,这就是二进位。例如,数字 0、1、10、11、111、1111110都是有效的二进位。

在计算机内部,数据都是以二进位的形式存储的,二进位是学习编程必须掌握的基础。

二进位加减法和十进位加减法的思想是类似的(其实所有的进位的算术原理都是相似的):

对于十进位,进行加法运算时逢十进一,进行减法运算时借一当十;

对于二进位,进行加法运算时逢二进一,进行减法运算时借一当二。

二进位加减法的运算过程,自己可以在纸上画出来,其实就是我们小学老师教的列竖式的加减法啊。

1) 二进位加法:1+0=1、1+1=10、11+10=101、111+111=1110

2) 二进位减法:1-0=1、10-1=1、101-11=10、1100-111=101

八进位

除了二进位,C语言还会使用到八进位。

八进位有 0~7 共8个数字,基数为8,加法运算时逢八进一,减法运算时借一当八。例如,数字 0、1、3、7、26、77、77777都是有效的八进位。

1) 八进位加法:6+2=10、6+6=14

2) 八进位减法:6-4=2、20-7=11

十六进位

除了二进位和八进位,十六进位也经常使用,甚至比八进位还要多。

十六进位中,用A来表示10,B表示11,C表示12,D表示13,E表示14,F表示15,因此有 0~F 共16个数字,基数为16,加法运算时逢16进1,减法运算时借1当16。例如,数字 0、1、5、9、A、D、F、567D、F55、AAA65F、EE22 都是有效的十六进位。

注意,十六进位中的字母不区分大小写,ABCDEF 也可以写作 abcdef。

1) 十六进位加法:6+4=A、58+62=BA、A00+600=1000

2) 十六进位减法:1D-2=1B、AB52-69FF=41B3、

二进位、八进位、十六进位、十进位之间的转换。掌握原理即可。

二进位、八进位和十六进位向十进位转换都比较容易,这部分其实中学也是学过的。也是很基础。就是「按权相加」。所谓「权」,也即「位权」。

假设当前数字是 N 进位:对于整数部分,从右往左看,第 i 位的位权等于N的i-1次方

对于小数部分,恰好相反,要从左往右看,第 j 位的位权为N -j次方。我记得高中学过,相当于公式把将十进位转换为二进位、八进位、十六进位,十进位整数转换为 N 进位整数采用「除 N 取余,逆序排列」

小数部分实际开发用的很少,有兴趣的可以自学下,稍微麻烦点。

二进位和八进位、十六进位的转换,这个得掌握,把常用的记住,灵活使用

1) 二进位整数和八进位整数之间的转换

二进位整数转换为八进位整数时,每三位二进位数字转换为一位八进位数字,运算的顺序是从低位向高位依次进行,高位不足三位用零补齐。

2) 二进位整数和十六进位整数之间的转换

二进位整数转换为十六进位整数时,每四位二进位数字转换为一位十六进位数字,运算的顺序是从低位向高位依次进行,高位不足四位用零补齐。

另外推荐Windows系统下用计算机器 调成程序员模式,既可以各种进位之间的换算。

建议先找几个简单的例子换算下。

这张表格建议记住比较实用。

另外

本人专业从事C语言开发,也结合开发和平时教学总结了一本关于C语言的讲义,欢迎咨询,提供C语言辅导服务,专升本计算机辅导,计算机二级辅导等等,一对一扣扣在线辅导。


推荐阅读:
相关文章