C 数据类型与运算符.ppt
文本预览下载声明
原码:最高位为符号位,其余各位为数值本身的绝对值 反码: 正数:反码与原码相同 负数:符号位为1,其余位对原码取反 补码: 正数:原码、反码、补码相同 负数:最高位为1,其余位为原码取反,再对整个数加1 (绝对值的二进制形式按位取反加1) 一般形式: 表达式1 ? 表达式2 : 表达式3 执行过程:计算a,若表达式1非0,则表达式2作为表达式值,否则表达式3作为表达式值。 功能:相当于条件语句,但不能取代一般if语句 结合性:自右向左 如: ab?a:cd?c:d ? ab?a:(cd?c:d) 说明:a、b和c表达式类型可以不同,其值取较高的类型 a b !a !b ab a||b 真 假 真 假 假 假 真 真 逻辑运算符 种类与优先级:! || 逻辑运算真值表 真 假 假 假 假 假 真 真 假 假 真 真 真 假 真 真 逻辑运算符和表达式 C语言中,所有非0值,都视为真值 例: a=x x=b ab xy a==b || x==y !a || ab // (a=x) (x=b) // (ab) (xy) // (a==b) || (x==y) // (!a) || (ab) !高于算术运算符,、||低于关系运算符 逻辑优化:逻辑表达式求解时,并非所有的逻辑运算符都被执行。如ab,只要a值为0,不管b值如何,其结果都为0。 例: abc //只在a为真时,才判别b的值; 只在a、b都为真时,才判别 c的值 a||b||c //只在a为假时,才判别b的值; 只在a、b都为假时,才判别 c的值 a=1;b=2;c=3;d=4;m=1;n=1; (m=ab)(n=cd) //结果0 逻辑运算符和表达式 逻辑运算符和表达式 例: #include stdio.h void main() { int x, y, z; x=y=z=0;++x||++y||++z; printf(“x=%d,y=%d,z=%d\n”,x,y,z); x=y=z=0;++x++y||++z; printf(“x=%d,y=%d,z=%d\n”,x,y,z); x=y=z=0;++x++y++z; printf(“x=%d,y=%d,z=%d\n”,x,y,z); x=y=z=0;++x||++y++z; printf(“x=%d,y=%d,z=%d\n”,x,y,z); } 运行结果: x=1,y=0,z=0 x=1,y=1,z=0 x=1,y=1,z=1 x=1,y=0,z=0 逻辑运算符和表达式 例:逻辑运算 #include stdio.h void main() { char c=‘k’; int i=1,j=2,k=3; float x=3e+5,y=0.85; printf(“%d,%d\n”,!x*!y,!!!x); printf(“%d,%d\n”,x||i j-3,ijxy); printf(“%d,%d\n”,i==5 c(j=8),x+y||i+j+k); } 运行结果: 0,0 1,0 0,1 例: (a==b)?’Y’:’N’ (x%2==1)?1:0 (x=0)?x:-x (c=‘a’ c=‘z’)?c-’a’+’A’:c 条件运算符和表达式 例:输入两个整数,并选择其中较大数输出 #include stdio.h void main() { int a,b,c; scanf(“%d%d”,a,b); c=ab?a:b; printf(“%d”,c); } 运行结果: 3 5↙ 5 形式:表达式1,表达式2,……表达式n 结合性:从左向右 优先级: 15 逗号表达式的值:等于表达式n的值 例: a=3*5,a*4 a=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,
显示全部