c语言(第三章表达式)
第三章 数据类型、运算符与表达式 主要内容 预备知识 数据类型 常量与变量 不同类型数据间的转换 运算符和表达式 3.0 预备知识 计算机中数的表示及进制转换 3.0.1 进位计数制(进制) 所谓进位计数制就是按进位的方法进行计数,简称“进制”。通俗地说,就是将多少个“1”凑合在一起的问题。凑合多少个“1”进一位,就是多少进制。 3.0.2 进位计数制的特点 ⑴每一种进制都允许使用固定个数的数码。这些数码的个数称为基数。 数码:表示数的符号 基:数码的个数 ⑵逢N进一,N是指基数。 N进制数逢N进一。 ⑶采用位权表示法 处于不同位置上的相同的数字所代表的值不同。一个数字在某个位置上所表示的实际数值等于该数字与这个位置的因子的乘积,而该因子由所在位置相对于小数点的距离来决定,这个因子叫做位权,简称权。 3.0.3 权与基数的关系 各进位计数制中权的值恰是基数的整数次幂。小数点左边第一位的权是基数的0次幂,往左每移动一位幂增加1,往右每移动一位幂减少1。 因此,任何一种数制表示的数都可以写成按权展开的多项式之和,称为按权展开式。 3.0.4 常用进制 K进制数的某些性质: 小数点右移n 位——相当于乘以K n(增加K n 倍) 小数点左移n 位——相当于除以K n (为K n 分之一) 3.0.5 不同数制的表示 一般地,为了表示某个数的进制,经常在这个数字的后面加一个字母或数字下标。 3.0.6 数制转换 二进制数的运算规则简单,很适合计算机的内部使用,但是二进制数码太长,使用起来很麻烦,人们又经常用八进制、十六进制作为二进制的缩写形式,而这些数字对人来说不如十进制数那样直观,这就需要对不同数制之间的数进行转换. 转换的规则是:如果两个有理数相等(有限位数字),则两个数的整数部分和小数部分一定分别相等。在进行不同数制的数之间的转换时,把整数部分和小数部分分别进行转换,然后合起来即可。 (1)二进制、八进制、十六进制转换成十进制 方法:按权相加 只要写出该进制数的按权展开式,按十进制进行乘法和加法运算,得出结果即可 (2)十进制转换成二进制、八进制、十六进制 方法:对整数部分和小数部分分别进行转化 Ⅰ 整数部分的转化 这种转化采用“除以基数取余”法,具体就是:除以K取余数,直到商为0,余数从自下而上排列即可 II 小数部分的转化 这部分的转化采用的是“乘以基数取整法”,以小数部分乘以K取积的整数,并将其自上而下排列,直到小数部份为0或规定精度为止。 (3) 二进制与八进制 二进制转换成八进制: 从小数点开始,向左或向右每三位二进制数划分为一组,如果位数不足三位,可以补0。然后按对应位置写出与每一组二进制数等值的八进制数及对应的小数点,就可得到转换后的八进制数。 八进制转换成二进制: 用3位二进制数代替每一位八进制数 (4) 二进制与十六进制 二进制转换成十六进制: 从小数点开始,向左或向右每四位二进制数划分为一组,如果位数不足四位,可以补0。然后按对应位置,写出与每一组二进制数等值的十六进制数及对应的小数点,就可得到转换后的十六进制数。 十六进制转换成二进制: 用4位二进制数代替每一位十六进制数. 3.0.7 数值数据编码(原码、反码、补码) (1)符号位的表示 数的正负号也用“0”和“1”表示。通常规定一个数的最高位为符号位,“0”表示正,“1”表示负,称作符号数。 (2)机器数和真值 把机器内存放的正负号数码化的数称为机器数;把在机器外存放的由正负号表示的数称作真值。 (3)原码 最高位为符号位,“0”表示正,“1”表示负,数值部分是真值的绝对值。 原码表示的优点是在数的真值和它的原码之间的对应关系简单,相互转换容易,用原码实现乘除运算的规则简单。缺点就是0有两个编码值,尤其用原码实现加减运算不方便. (4)反码 正数的反码和原码相同,负数的反码是对其原码除符号位外各位求反(即0变1,1变0) (5)补码 正数的补码和原码相同,负数的补码是在其反码的最后一位上加上1 3.0.8 二进制数的定点和浮点表示 (1)定点表示法——小数点位置固定不变 1、定点整数 a)带符号定点整数 b)无符号定点整数 2、定点小数 (2)浮点表示法——小数点位置是“浮动的” 浮点数通常被表示成:N=±M?RE 这里的M被称为浮点数的尾数,R称为基数,E称为阶码。 要表示浮点数,一是要给出尾数M,通常用定点小数形式表示,它决定了浮点数的表示精度,即可以给出的有效数字的位数。二是要给出阶码,通常用定点整数形式表示,它指出的是小数点在数据中的位置,决定了浮点数的表示范围。 字节和位 内存以字节为单元组成 每个字节有一个地址 一个字节一般由8个二进制位组成 每个二进位的值是0或1 3.1 C的数据类型 数据类型总表 数据类型