基本数据类型及运算.ppt
按位与运算符00=0;10=0;01=0;11=1用途:清零保留某些位例:inti;i0x00FF/*lowbyte*/i0x8000/*themosthighbit*/例:按位或运算符|inta=9,b=5,c;
c=a|b;
printf(a=%d,b=%d,c=%d\n,a,b,c);/*9,5,13*/0|0=0;1|0=1;0|1=1;1|1=1用途:置1取指定位值按位异或运算符^0^0=0;1^0=1;0^1=1;1^1=0用途:使特定位翻转交换变量值,不用临时变量例:inta,b,t;t=a;a=b;b=t;/*needtemporaryvariable*/a+=b;b=a-b;a-=b;/*possibilityofoverflow*/a^=b;b^=a;a^=b;按位取反运算符~~0=1;~1=0用途:特定位清零charc;inti;c0xFD/*11111101*/i0xFFFD/*1111111111111101*/?考虑移植性,可用:c~0x02i~0x02/*2byteintor4byteint*/把左边的运算数的各二进位全部左移若干位,由右边的数指定移动的位数,高位丢弃,低位补0。无溢出时,左移1位相当于乘2,但快得多。例:inti=15;/**/i2;/*=60*/?功能:用途:左移运算符用途:03右移1位相当于除以2,但快得多。unsignedcharc=241;/*11110001*/c2;/*00111100=60=241/4*/有符号数右移:02当为正数时,最高位补0;而为负数时,符号位为1,最高位是补0或是补1取决于编译系统的规定。功能:01把左边的运算数的各二进位全部右移若干位,由右边的数指定移动的位数。右移运算符赋值运算符和表达式简单赋值运算符符号:=格式:变量标识符=表达式作用:将一个数据(常量或表达式)赋给一个变量复合赋值运算符种类:+=-=*=/=%====^=|=~=含义:exp1op=exp2?exp1=exp1opexp2a+=3a=a+3x*=y+8x=x*(y+8)x%=3x=x%3例a=3;d=func();c=d+2;赋值运算符和表达式(续)说明:结合方向:自右向左优先级:左侧必须是变量,不能是常量或表达式赋值转换规则:使赋值号右边表达式值自动转换成其左边变量的类型错误:3=x-2*y;a+b=3;例floatf;inti;i=10;f=i;则f=10.0例inti;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)/*表达式值为5,a,b,c值为5*//*b=5,a=5*//*表达式值11,c=6,a=11*//*表达式值10,a=10,b=4,c=6*//*表达式值5,a=5,b=10,c=2*/赋值表达式的值与变量值相等,且可嵌套赋值运算符和表达式(续)赋值类运算符的副作用及限制C语言允许在一个表达式中使用一个以上赋值运算符。※对人的影响和副作用,易造成误解。1.程序尽可能写得明了易懂一些;2.加上一些不必要的括号。※对机器的副作用,不定解。交换律不再适用。例:a=12;a+=a-=a*a;/*a=-264等价于a=a+(a=a-(a*a))*/“=”两侧类型不一致时,要进行类型转换:赋值运算时的类型转换“=”两侧类型不一致时,要进行类型转换:整←实:截掉小数部分实(单、双精度)←整:数值不变,存为浮点整←char:整型低8位←char
整型高8位←0或符号位扩展(因机器而不同)longint←int:符号位扩展int←longin