资源预览内容
第1页 / 共45页
第2页 / 共45页
第3页 / 共45页
第4页 / 共45页
第5页 / 共45页
第6页 / 共45页
第7页 / 共45页
第8页 / 共45页
第9页 / 共45页
第10页 / 共45页
亲,该文档总共45页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
q常量和变量 q标识符与关键字 q整型数在计算机中的存储方式 q有符号的数据类型和无符号的数据类型 q运算符及表达式 q不同类型数据间的转换第二章 C语言数据类型与基本操作1数据类型 类型关键字取值范围 位数(signed)int16-3276832767 (signed)short16-3276832767 (signed)long32-21474836482147483647 16unsigned int0655353204294967295unsigned longunsigned short16065535float321e-371e38 double641e-3071e308char8说明:数据类型所占位数随机器硬件不同而不同,上表以微机为例:long double 80 1e-49311e4932字符型浮点型整 型3q整型常量十进制:例 15,19,123,-345,0八进制:以 0(零) 开头的整数 ,例 0123,011 十六进制:以 0x 或 0X 开头的整数,例 0x123,0Xff 一个变量可以边定义边赋值; 例:int a,b,c;float data;变量类型决定变量所占存储空间大小变量名例:int a=2,b,c=4;float data=3.67;char ch=A;int x=1,y=1,z=1;int x=y=z=1;所有变量必须先定义后使用。.例1int student;stadent=19; /Undefined symbol statent in function main 例2 float a,b,c;c=a%b; / illegal use of floating point in function main 一般在函数开始部分定义. main() int a,b=2;float data;a=1;data=(a+b)*1.2;printf(data=%fn,data); 变量定义可执行语句main() int a,b=2;a=1;float data;data=(a+b)*1.2;printf(data=%fn,data); 3a变量名值存储单元9shortintlong sizeof( type )求字节数字符可以当作一般整型数来处理.例 float a; a=111111.111; /* a=111111.1*/ double b; b=111111.111; /* b=111111.111*/ 例 a=D; /* a=68; */x=A+5; /* x=65+5; */s=! +G /* s=33+71; */b _above $1231232 个关键字:(由系统定义,不能重作其它定义由系统定义,不能重作其它定义) )auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef unsigned union void volatile while-关键字132.3 整型数在计算机中的存储方式1.二进制位与字节计算机系统的内存储器,是由许多称为字节的单元 组成的,1个字节由8个二进制位(bit)构成,每位的取 值为0/1。最右端的那1位称为“最低位”,编号为0;最左 端的那1位称为“最高位”,而且从最低位到最高位顺序, 依次编号。图11-1是1个字节各二进制位的编号。图11-1 1个字节各二进制位的编号 2.数值的原码表示 数值的原码表示是指,将最高位用作符号位(0表示正数 ,1表示负数),其余各位代表数值本身的绝对值(以二 进制形式表示)的表示形式。为简化描述起见,本节约 定用1个字节表示1个整数。 76543210142.3 整型数在计算机中的存储方式例如,+9的原码是00001001符号位上的0表示正数-9的原码是10001001。符号位上的1表示负数3.数值的反码表示 数值的反码表示分两种情况: (1)正数的反码:与原码相同。 例如,+9的反码是00001001。 (2)负数的反码:符号位为1,其余各位为该数绝对 值的原码按位取反(1变0、0变1)。 例如,-9的反码:因为是负数,则符号位为“1”;其余 7位为-9的绝对值+9的原码0001001按位取反为1110110 ,所以-9的反码是11110110。152.3 整型数在计算机中的存储方式4.数值的补码表示 数值的补码表示也分两种情况: (1)正数的补码:与原码相同。 例如,+9的补码是00001001。 (2)负数的补码:符号位为1,其余位为该数绝对值 的原码按位取反;然后整个数加1。 例如,-9的补码:因为是负数,则符号位为“1”;其 余7位为-9的绝对值+9的原码0001001按位取反为1110110 ;再加1,所以-9的补码是11110111。 已知一个数的补码,求原码的操作分两种情况: (1)如果补码的符号位为“0”,表示是一个正数,所 以补码就是该数的原码。 (2)如果补码的符号位为“1”,表示是一个负数,求 原码的操作可以是:符号位不变,其余各位取反,然后再 整个数加1。162.3 整型数在计算机中的存储方式 例如,已知一个补码为11111001,则原码是10000111(-7):因 为符号位为“1”,表示是一个负数,所以该位不变,仍为“1”;其 余7位1111001取反后为0000110;再加1,所以是10000111。5.数值在计算机中的表示补码在计算机系统中,数值一律用补码表示(存储),原因在于:使 用补码,可以将符号位和其它位统一处理;同时,减法也可按加 法来处理。另外,两个用补码表示的数相加时,如果最高位(符 号位)有进位,则进位被舍弃。原码反码补码+7000001110000011100000111-7100001111111100011111001+0000000000000000000000000-0100000001111111100000000(用一字节表示数)172.4 有符号的数据类型和无符号的数据类型类类型类类型标识标识 符长长 度取值值范围围及精度字符 型signed char8-128+127unsigned char80255整形signed short int16-32768+32767unsigned short int16065535signed long int32-2 147 483+2 147 647unsigned long int3204 294 967 295实实型Float32约约(3.410-383.41038),6位 精度Double64约约(1.710-3081.710308), 16位精度表2.3基本数据归纳18w2.5 运算符及表达式 = != 逻辑运算符:! d=func();c=d+2;20q算术运算符及表达式 运算符 :+ - * / %(取余)+(自增)-(自减)运算规律 :从左至右 优先级 : % -* / - + -(1) (2) (3) 注: 两个整数 / 是 整型; 两个整数 %是 整型.例 5/2 =-5/2 =例 5%2 =-5%2 =1%10 =5%1 =5.5%2/k=4,j=4 /k=3,j=4 /4 /3 /c=20,a=4 /c=15,a=422注意 : 只针对变量,而不针对常量和表达式;不要产生 二义性;运算规律是自右至左。如 8+ (x*y)+j= -(+k); k=4 j= -4j= -(k+); k=4 j= -3 例 k=3;j= -+k;j= -k+; v 解决办法1. 避免在同一表达式中的同一变量的自加自减.例: i=3;y=(i+)+(i+) y=6 i=5 y=3+3; i+; i+; y=7 i=5 y=3+4; i+;232.不使用连续运算符,用括弧分隔。例1:i=3;j=1;x=i+j; 例3: i=3; printf(“%d,%d“, i , i+); x=i+(+j); x=5 i=3 j=2 x=(i+)+j; x=4 i=4 j=1 例2: i=3;j=1;x=i-+j ;等价于 x=i-(+j); x=1 i=3 j=2可能输出: 3,3 4,33.在函数调用时,实参的求值顺序C无统一规定.24注: 运算顺序: 右-to-左 操作符左边只能是 变量,不能是常量和 表达式 高到低转换数据有可能丢失例 3=x-2*y;a+b=3; 例 float f; int i;i=10; f=i; 则 f=10.0例 int i; i=2.56; /结果i=2;例: a=b=c=5a=(b=5)a=5+(c=6)a=(b=4)+(c=6)a=(b=10)/(c=2)!= 运算顺序: 左-to-右 优先级:= = !=优先级别相同(高)优先级别相同(低)例 ca+b /c(a+b)ab!=c /(ab)!=ca=bc /a=(bc) 关系表达式的值为一个逻辑值,用 1 代表“真”,用 0 代表“假”。非零数也表示“真”。例 int a=3,b=2,c=1,d,f;ab (ab)=cb+cbf=abc例 若 a=0; b=0.5; x=0.3;则 a278在C中是允许的,值为0例 int i=1, j=7,a; a=i+(j%4!=0); 则a=2例 a0 结果为A100 结果为1028注意:例 注意区分“=”与“=”int a=0,b=1;if(a=b) printf(“a equal to b“);elseprintf(“a not equal to b“);例 应避免对实数作相等或不等的判断 如 1.0/3.0*3.0=1.0 结果为 可改写为:fabs(1.0/3.0*3.0-1.0)TFFFFFTTFF TTTFTT30! b=5;!aab=2;c=3;d=4;m=1;n=1;(m=ab)elseprintf(“%d“,b);printf(“%d“,ab?a:b);例 求 a+|b|printf(“a+|b|=%dn“,b0?a+b:a-b);expr1取expr2值取expr3值非0=0例 (a=b)? Y : N (x%2=1)?1:0(x=0)?x:-x(c= a x0,表达式值为a xy?1:1.5 /xy ,值
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号