高级语言在执行的过程中要解释或编译成二进制代码,即转换成计算机语言才能被识别。C语言程序在执行的过程中要将源程序解释或编译成目标程序,
1.2.1 数制
数制也称计数制,是指用一组固定的符合和统一的规则来表示数值的方法。计算机处理的信息必须转换成二进制形式数据后才能存储和传输。计算机中,经常使用的进制有二进制、八进制、十进制、十六进制。
- 二进制
二进制数由两个基本数字0、1组成,二进制数的运算规律是逢二进一。二进制数的书写通常在数的右下方注上基数2,或在后面加B与其他进制加以区别,如二进制100101可以写成(100101)2或写成100101B。
二进制数的加法和乘法运算如下:
0+0=0 0+1=1+0=1 1+1=10 1000110
0*0=0 0*1=1*0=0 1*1=1 + 0010101
1011011
- 八进制数
八进制是由0~7共8个数字组成的,运算规则是逢八进一。八进制的基 R=8=23 ,并且每个数码正好对应三位二进制数,所以八进制能很好地反映二进制。二进制数据表示时用下标8或数据后面加O表示,如八进制261写成(261)8 、(261)O。
- 十进制数
十进制数是我们常用的数据表示方法,由0~9共10个数字组成,运算规则是逢十进一。表示时用下标10或数据后面加D,也可以省略。
- 十六进制数
十六进制数由0~9及A~F共16个数字组成, A~F分别表示十进制数10~15,运算规则是逢十六进一。通常在表示时用下标16或数据后面加 H。如(1FA)16或(1FA)H。
Tips:在C语言程序中,我们可以通常按十进制写,如果写的是十六进制,需要以0x开头;八进制以0开头,如0123表示八进制的123,0x123,则表示十六进制的123.
1.2.2 数制的转换
我们知道计算机中数据是以二进制的形式存在的,但是二进制数据太长,没有人愿意对很长的二进制进行操作,用十六进制或八进制可以解决这个问题。因为进制越大,数的表达长度也就越短。不过,为什么偏偏是十六或八进制,而不是其他的诸如九或二十进制呢?因为2,8,16,分别是2的1次方、3次方、4次方,这一点使得三种进制之间可以非常直接地互相转换。八进制或十六进制即缩短了二进制数又保持了二进制数的表达特定。
- 二进制、八进制、十六进制转换成十进制
规则:数码乘以各自的权的累加
【实例1-1】其他进制转换成十进制。
(10001)B=24+20=17
(101.01)B=22+20+2-2=5.25
(011)O=81+80=9
(72)O=7*81+2*80=58
(112A)H=1*163+1*162+2*161+10*160=4394
- 十进制转换成二进制、八进制、十六进制
规则如下:
整数部分:除以进制取余数,直到商为0,余数从下到上排列。
小数部分:乘以进制取整数,得到的整数从上到下排列。
【实例1-2】十进制转换其他进制
整数部分:20/2=10 余0 小数部分:0.345*2=0.69 ---取整数0
10/2=5 余0 0.69*2=1.38 ---取整数1
5/2=2 余1 0.38*2=0.76 ---取整数0
2/2=1 余0 0.76*2=1.52 ---取整数1
1/2=0 余1 0.52*2=1.04 ---取整数1
20.345D=10100.01011B
(2) 十进制100转换成八进制、十六进制
100/8=12 ---余4 100/16=6 ---余4
12/8=1 ---余4 6/16=0 ---余6
1/8=0 ---余1
100D=144O 100D=64H
- 二进制转换成八进制
规则如下:
整数部分:从右往左按三位进行分组,不足补零。
小数部分:从左往右按三位进行分组,不足补零。
【实例1-3】将二进制数(1101101110.110101)2转换成八进制数。
001 101 101 110.110 101
1 5 5 6 6 5
(1101101110.110101)2=(1556.65)8
- 二进制转换成十六进制
规则如下:
整数部分:从右往左按四位进行分组,不足补零。
小数部分:从左往右按四位进行分组,不足补零。
【实例1-4】将二进制数(001101101110.110101)2转换成十六进制数。
0011 0110 1110.1101 0100
3 6 E D 4
(001101101110.110101)2=(36E.D4)
- 八进制、十六进制转换成二进制
- 规则如下:
一位八进制对应三位二进制。
一位十六进制对应四位二进制。
【实例1-5】八进制、十六进制转换成二进制。
(136)8=(001 011 110)2 (17A)16=(0001 0111 1010)2
1 3 6 1 7 A
1.2.3 计算机中数据的存储
我们已经知道在计算机内所有数据最终都是使用二进制数表示的,上一节我们已经学习了如何将一个十进制。八进制。十六进制转换为二进制,数值有正负之分,它们在计算机内是如何存储的呢?
在计算机中,数据有三种表示方法:原码。反码和补码。计算机用一个二进制的最高位存放所表示数值的符号,最高位为0表示正数,最高位为1表示负数。对于一个正数,原码是将该数按照绝对值大小转换成的二进制,它的反码和补码相同。对于一个负数,原码是将该数按照绝对值大小转换的二进制数,它的反码和补码与原码相同。对于一个负数,原码是将该数按照绝对值大小转换成的二进制数,最高位即符号位为1;它的反码是除符号位外将二进制数按位取反,所得的新二进制数称为原二进制数的反码;它的补码是将其二进制的反码加一。计算机中任何一个带有符合的二进制数都是以补码形式进行运算和存储的。
如下所示:
整数 | 原码 | 反码 | 补码 |
1 | 0000 0001 | 0000 0001 | 0000 0001 |
-1 | 1000 0001 | 1111 1110 | 1111 1111 |