该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
2.3 整型数据
整形常量
在C语言程序中,整型常量可以用十进制、八进制和十六进制等形式表示。十进制基本常量用一串连续的数字表示,例如32767、-32768、0等。
八进制数也是用一串连续的数字表示,但其开头必须是数字”0”。例如010、011、016等都是合法的八进制数,与之对应的十进制数为8、9、14。因此,在C程序中不能在一个十进制数前随意添加数字”0”。例如,不能把十进制数1 l写成011。注意:八进制数必须用合法的八进制数字表示。例如,不能写成018,因为数字8不是八进制数字。
十六进制数用数字0和字母X(或大写字母X)开头。例如Ox10、OXde、Oxf等都是合法的十六进制数,与之对应的十进制数分别为16、222、15。注意:十六进制数必须用合法的十六进制数字表示。十六进制数中的字母a、b、e、d、e、f既可以用小写也可以用大写。
在C程序中,只有十进制数可以是负数,而八进制和十六进制数只能是整数。
整型常量又有短整型(short int)、基本整型(int)、长整型(10ng int)和无符号型(unsigned)等不同类型。
整型变量
整型变量可以分为基本型、短整型、长整型和无符号型四种。本节只介绍基本型的整型变量。
整数在内存中的存储形式
计算机中,内存储器的最小存储单位称为”位(bit)”。由于只能存放0或1,因此称为二进制位。大多数计算机把8个二进制位组成一个”字节(byte)”,并给每个字节分配一个地址。若干字节组成一个”字(word)”,用一个”字”来存放一条机器指令或一个数据。一个字含多少个字节随机器的不同而不同。如果一台计算机以两个字节(16个二进制位)来存放一条机器指令,则称此计算机的字长为16位;如果以四个字节(32个二进制位)来存放一条机器指令,则称此计算机的字长为32位。
通常把一个字节中的最右边一位称为最低位,最左边一位称为最高位。对于一个有符号整数,其中最高位(最左边的一位)用来存放整数的符号,称为符号位。若是正整数,最高位放置0;若是负整数,最高位放置1。
2.4 实型数据
实型常量
实型常量又称实数或浮点数。在C语言中可以用两和中形式表示一个实型常量。
一、小数形式
小数形式是由数字和小数点组成的一种实数表示形式,例如1.123、.123、123.、0.0等都是合法的实型常量。注意:小数形式表示的实型常量必须要有小数点。
二、指数形式
这种形式类似数学中的指数形式。在数学中,一个数可以用幂的形式来表示,如2.3026可以表示为0.23026×101、2.3026×100、23.026×10-1等形式。在C语言中,则以”e”或”E”后跟一个整数来表示以10为底的幂数。2.3026可以表示为0.23026E1、2.3026e0、23.026e-1。C语言的语法规定,字母e或E之前必须要有数字,且e或E后面的指数必须为整数。如e3、.5e3.6、.e3、e等都是非法的指数形式。注意:在字母e或E的前后以及数字之间不得插入空格。
实型变量
C语言中实型变量分为单精度型和双精度型两种,分别用类型名float和double进行定义。
2.5 算术表达式
基本的算术运算符
在C语言中,基本的算术运算符是:+、-、*、/、%,分别为加、减、乘、除、求余运算符。这些运算符需要两个运算对象,称为双目运算符。除求余运算符%外,运算对象可以是整型,也可以是实型。如l+2、1.2*3.2。
求余运算符的运算对象只能是整型。在%运算符左侧的运算数为被除数,右侧的运算数为除数,运算结果是两数相除后所得的余数。当运算数为负数时,所得结果的符号随机器的不同而不同。
“+”和”-”也可用作单目运算符,运算符必须出现在运算数的左边。运算数可为整型,也可为实型。如:-54、+3.9。
运算符的优先级、结合性和算术表达式
在C语言中,常量、变量、函数调用以及按C语言语法规则用运算符把运算数连起来的式子都是合法的表达式。凡是表达式都有一个值,即运算结果。
一、算术运算符的优先级
二、算术运算符和圆括号的结合性
以上所列的运算符中,只有单目运算符“+”和“-”的结合性是从右到左的,其余运算符的结合性都是从左到右。
三、算术表达式
用算术运算符和一对圆括号将运算数(或称操作数)连接起来的、符合C语言语法的表达式称为算术表达式。
强制类型转换表达式
强制类型转换表达式的形式如下:
(类型名)(表达式)
上述形式中,(类型名)称为强制类型转换运算符,利用强制类型转换运算符可以将一个表达式的值转换成指定的类型,这种转换是根据人为要求进行的。例如:表达式(int)3.234把3.234转换成整数3;表达式(double)(10%3)把10%3所得结果l转换成双精度数。
2.6 赋值表达式
赋值运算符和赋值表达式
在c语言中,赋值号”=“是一个运算符,称为赋值运算符。由赋值运算符组成的表达式称为赋值表达式,其形式如下:
变量名=表达式
赋值号的左边必须是一个代表某一存储单元的变量名,对于初学者来说,只要记住赋值号左边必须是变量名即可。赋值号的右边必须是C语言中合法的表达式。赋值运算的功能是先求出右边表达式的值,然后把此值赋给赋值号左边的变量,确切地说,是把数据存入以该变量为标识的存储单元中去。
复合赋值表达式
在赋值运算符之前加上其他运算符可以构成复合赋值运算符。c语言规定可以使用10种复合赋值运算符,其中与算术运算有关的复合赋值运算符有:+=、-=、*=、/=、%=(注意:
两个符号之间不可以有空格)。复合赋值运算符的优先级与赋值运算符的优先级相同。表达式n+=1的运算规则等价于n=n+1,表达式n*=m+3的运算规则等价于n=n*(m+3),因为运算符“+”的优先级高于复合赋值运算“* =”。其他以此类推。
赋值运算中的类型转换
在赋值运算中,只有在赋值号右侧表达式的类型与左侧变量类型完全一致时,赋值操作才能进行。如果赋值运算符两侧的数据类型不一致,在赋值前,系统将自动先把右侧表达式求得的数值按赋值号左边变量的类型进行转换,也可以用强制类型转换的方式人为地进行转换后将值赋给赋值号左边的变量。这种转换仅限于数值数据之问,通常称为”赋值兼容”。对于另外一些数据,例如后面将要讨论的地址值就不能赋给一般的变量,称为”赋值不兼容”。
在这里,特别需要指出的是在进行混合运算时整型数据类型之间的转换问题。
2.7 自加、自减运算符和逗号运算符
自加运算符“++”和自减运算符“--”
(1)自加运算符”++”和自减运算符”- -”的运算结果是使运算对象的值增1或减l。如
i++,相当于i=i+1;i- -,相当于i=i-1。因此,自加或自减运算本身也是一种赋值运算。
(2)运算符”++”和”- -”是单目运算符,运算对象可以是整型变量也可以是实型变量,但不能是常量或表达式,因为不能给常量或表达式赋值。因此,如++3、(i+j)- -等都是不合法的。
(3)用自加或自减运算符构成表达式时,既可以前缀形式出现,也可以后缀形式出现。
(4)运算符”++”和”- -”的结合方向是”自右至左”。
(5)不要在一个表达式中对同一个变量进行多次诸如i++或++i等运算
逗号运算符和逗号表达式
“,”是c语言提供的一种特殊运算符,用逗号将表达式连接起来的式子称为逗号表达式。逗号表达式的一般形式为:
表达式1,表达式2,……,表达式n
说明:
(1)逗号运算符的结合性为从左到右,因此逗号表达式将从左到右进行运算。即,先计算表达式1,然后计算表达式2,依次进行,最后计算表达式n。最后一个表达式的什就是此逗号表达式的值。例如:(i=3,i++,++i,i+5)这个逗号表达式的值是10,i 的值为5。
(2)在所有运算符中,逗号运算符的优先级最低。