第二章标识符、常量和变量C语言的数据类型算术运算符和算术表达式赋值表达式C语言中数的表现形式有四种:十进制二进制八进制十六进制语言程序设计第二章数据描述C16页数制基权表示数码特点10º,10¹,10²,…十进制数0~910逢十进一二进制数0~122º,2¹,2²,…逢二进一八进制数0~788º,8¹,8²,…逢八进一十六进制数0~9,A~F,a~f1616º,16¹,16²,…逢十六进一十进制:4956=410³+910²+510¹+610º二进制:1011=12³+02²+12¹+12º十六进制:81AE=816³+116²+1016¹+1416º八进制:4275=48³+28²+78¹+58º语言程序设计第二章数据描述C各种进制之间的转换二进制、八进制、十六进制转换成十进制方法:按权相加10012345259212120212121111011)()(例10012894868381136)()(例1001231679781610162161516121)()(例AF语言程序设计第二章数据描述C17页各种进制之间的转换(整数)二进制、八进制、十六进制转换成十进制方法:按权相加十进制转换成二进制、八进制、十六进制方法:连续除以基,从低到高记录余数,直至商为0例把十进制数59转换成二进制数5922921427232120(59)10=(111011)2110111111011余余余余余余例把十进制数159转换成八进制数1598198280(159)10=(237)8237余7余3余2例把十进制数459转换成十六进制数4591628161160(459)10=(1CB)161CB余11余12余1语言程序设计第二章数据描述C17页二进制与八进制之间的转换二进制转换成八进制:从右向左,每3位一组(不足3位左补0),转换成八进制八进制转换成二进制:用3位二进制数代替每一位八进制数例(1101001)2=(001,101,001)2=(151)8例(246)8=(010,100,110)2=(10100110)2000~0001~1010~2011~3100~4101~5110~6111~7语言程序设计第二章数据描述C18页二进制与十六进制之间的转换二进制转换成十六进制:从右向左,每4位一组(不足4位左补0),转换成十六进制十六进制转换成二进制:用4位二进制数代替每一位十六进制数例(11010101111101)2=(0011,0101,0111,1101)2=(357D)16例(4B9E)16=(0100,1011,1001,1110)2=(100101110011110)20000~00001~10010~20011~30100~40101~50110~60111~71000~81001~91010~A1011~B1100~C1101~D1110~E1111~F语言程序设计第二章数据描述C18页字节和位内存中最小的存储单位是“位”,只存0或11个字节=8个位最高位为符号位,0代表正整数,1代表负整数01234567012345678910……...语言程序设计第二章数据描述C例:整数3用一个字节来存11000000………….例:整数3用两个字节来存1100共16位(14个0,2个1)18页思考:用1个字节能表示的最大正整数和最大负整数各是多少?数值的表示方法——原码、反码和补码原码:最高位为符号位,其余各位为数值的二进制反码:正数:反码与原码相同负数:符号位为1,其余位对原码取反补码:正数:原码、反码、补码相同负数:最高位为1,其余位为原码取反,再对整个数加1语言程序设计第二章数据描述C19页原码反码补码+7000001110000011100000111-7100001111111100011111001+0000000000000000000000000-0100000001111111100000000数的范围01111111~11111111(-127~+127)01111111~10000000(-127~+127)01111111~10000000(-128~+127)(用一字节表示数)语言程序设计第二章数据描述C3126912457810119-5=49+7=16=(14)1219页§2.2常量与变量标识符定义:用来标识变量、常量、函数等的字符序列组成:只能由字母、数字、下划线组成,且第一个字母必须是字母或下划线大小写敏感不能使用关键字长度:最长32个字符命名原则:见名知意不宜混淆如l与I,o与0例:判断下列标识符号合法性sumSumM.D.JohndayDate3daysstudent_name#33lotus_1_2_3charab_above$123M.D.John3days#33char$123ab语言程序设计第二章数据描述C9页整型常量实型常量字符常量字符串常量常量定义:程序运行时其值不能改变的量(即常数)分类:语言程序设计第二章数据描述C如34-980如8.96-54.45‘A’‘p’‘9’“name”“student”10页变量概念:其值可以改变的量变量定义的一般格式:数据类型变量1[,变量2,…,变量n];例:inta,b,c;floatd,e;变量的使用:先定义,后使用例1ints=1;s=2;printf(“%d”,s);变量定义位置:一般放在函数开头语言程序设计第二章数据描述C10页§2.1数据类型基本类型字符类型char整型实型单精度型float双精度型double短整型short长整型long整型int语言程序设计第二章数据描述C11页根据占用内存字节数的不同基本数据类型(记住每种类型的数的表示范围)类型符号关键字数的表示范围所占位数整型字符型实型有无(signed)int16-32768~32767(signed)short16-32768~32767(signed)long32-2147483648~214748364716unsignedint0~65535320~4294967295unsignedlongunsignedshort160~65535有float323.4e-38~3.4e38有double641.7e-308~1.7e308有char8-128~127无unsignedchar80~255说明:数据类型所占字节数随机器硬件不同而不同,上表以IBMPC机为例:语言程序设计第二章数据描述C12页整型常量(整常数)三种形式:十进制整数:由数字0~9和正负号表示.如123,-456,0八进制整数:由数字0开头,后跟数字0~7表示.如0123,011十六进制整数:由0x开头,后跟0~9,a~f,A~F表示.如0x123,0Xff例12与12L整型常量的类型在整常量后加字母l或L,认为它是longint型常量问题:0123=()100x123=()100Xff=()1083291255问题:0123=()100x123=()100Xff=()10语言程序设计第二章数据描述C12页实型常量(实数或浮点数)表示形式:十进制数形式:(必须有小数点)如0.123,.123,123.0,0.0,123.指数形式:(e或E之前必须有数字;指数必须为整数)如12.3e3,123E2,1.23e4,e-5,1.2E-3.5语言程序设计第二章数据描述C14页字符常量定义:用单引号括起来的单个普通字符.在计算机中存在的形式:该字符的ASCII码值转义字符及其含义:转义字符含义\n\v\r\a\‘\ddd\t\b\f\\\“\xhh转义字符含义换行垂直制表回车响铃单引号3位8进制数代表的字符水平制表退格换页反斜线双引号2位16进制数代表的字符如‘\101’-----------‘A’‘\012’-----------’\n’‘\x61’-----------’a’如‘A’——65,‘a’——97,‘B’——66,‘b’——98如‘a’‘A’‘?’‘+’‘0’转义字符:反斜线后面跟一个字符或一个代码值表示例转义字符举例main(){printf(\101\x42C\n);printf(\\CProgram\\\n);}运行结果:(屏幕显示)ABC\CProgram\例main(){printf(“Y\b=\n”);}运行结果:屏幕显示:=14页算术运算符五种基本算术运算符:+-*/%C规定:两整数相除,结果为整数,小数部分被舍弃运算对象类型不一致时,低类型向高类型转换%(求余)要求两侧均为整型数据,否则出错例5/2=2例5%2=1-5%2=-11%10=15%1=05.5%2()语言程序设计第二章数据描述C低类型:占字节数少,高类型:占字节数多例-5/2.0=-2.519页算术运算符五种基本算术运算符:+-*/%C规定:两整数相除,结果为整数,小数部分被舍弃运算对象类型不一致时,低类型向高类型转换%(求余)要求两侧均为整型数据,否则出错语言程序设计第二章数据描述C低类型:占字节数少,高类型:占字节数多强制转换:(类型名)(表达式)例(int)(x+y)(int)x+y(double)(3/2)(int)3.6强调括号21页算术表达式用算术运算符和括号将运算对象连接起来的式子例:3+6*9(x+y)/2-1运算符的优先级与结合性(第20页)优先级高的先运算优先级相同时,按结合性运算语言程序设计第二章数据描述C20页赋值运算和赋值表达式赋值运算符:符号:=格式:变量=表达式作用:将一个表达式的值赋给一个变量例a=3;d=func();c=d+2;语言程序设计第二章数据描述C说明:优先级:14左侧必须是变量,不能是常量或表达式可以连续赋值,结合方向:自右向左5=a+2m=k=s=221页赋值运算和赋值表达式复合赋值运算格式:变量双目运算符=表达式语言程序设计第二章数据描述C例如:x+=3等价于x=x+3y*=x+6等价于y=y*(x+6)但不等价于y=y*x+6复合赋值运算符x+=3y*=x+622页自增运算符++、自减运算符--作用:使变量值加1或减1种类:前置++i,--i(先自增1或自减1,再使用i值)后置i++,i--(先使用i值,再自增1或自减1)说明:++--不能用于常量和表达式,如5++,(a+b)++++--结合方向:自右向左优先级:-++--------*/%-----+-(2)(3)(4)语言程序设计第二章数据描述C例j=3;k=++j;j=3;k=j++;j=3;printf(“%d”,++j);j=3;printf(“%d”,j++);a=3;b=5;c=(++a)*b;a=3;b=5;c=(a++)*b;//k=4,j=4//k=3,j=4//4//3//c=20,a=4//c=15,a=4结合性例子-i++-(i++)i=3;printf(“%d”,-i++);//-323页逗号运算符(,)及其表达式在C语言中逗号(,)也是一种运算符形式:表达式1,表达式2,……表达式n结合性:自左至右依次计算各表达式的值优先级:15(C语言中级别最低)逗号表达式的值:等于表达式n的值例a=3*5,a*4a=3*5,a*4,a+5例x=(a=3,6*3)x=a=3,6*a例a=1;b=2;c=3;printf(“%d,%d,%d”,a,b,c);printf(“%d,%d,%d”,(a,b,c),b,c);//a=15,表达式值60//a=15,表达式值20//赋值表达式,表达式值18,x=18//逗号表达式,表达式值18,x=3//1,2,3//3,2,3语言程序设计第二章