运算符与表达式
C语言一共34种运算符
算术运算符:+ - * / % ++ --
关系运算符:< <= == > >= !=
逻辑运算符:! && ||
位运算符:<< >> ~ | ^ &
赋值运算符:= *= /= %= = -= <<= >>= &= ^= |=
条件运算符:? :
逗号运算符:,
指针运算符: * &
求字节数:sizeof
强制类型转换:(类型)
分量运算符: . ->
下标运算符:[ ]
其他:()
表达式:运算符和运算量的组合式。变量和常量都是表达式。表达式都有值和类型。
赋值运算符、赋值表达式: 变量标识符 = 表达式。将一个数据(常量或表达式)赋给一个变量。 优先级:低_14
复合赋值运算符: += -= *= /= %= <= >= &= ^= |=
a+=3; -> a=a+3; x*=y+8 -> x=x*(y+8) ; x%=3 -> x=x%3;
①赋值运算符左边必须是变量,不能是常量或表达式。
②赋值运算符左边变量与右边表达式类型不同时,自动进行赋值转换,规则:右边表达式自动转换成左边变量的类型。
例:float f;
int i=32;
f='A'+32;
则:f=97.0;
int i;
i=2.56;
则:i=2;
③赋值表达式可以嵌套
例:a=b=c=5 a=5
a=(b=5) a=5
a=5+(c=6) a=11
强制类型转换符:在程序运行中,数据的类型改变成另一种数据类型
数据类型转换方法:自动转换和强制转换
强制转换一般形式:(类型名)(表达式) 例 :(int)x+y (只转换x) ;(int)(x+y);(double)(3/2)
强制转换得到所需类型的中间变量,原变量类型不变。
算术运算符、算术表达式: + - * / %
括号内表达式优先级最高 %只能作用于整形量。
-a + b * c - d
算术表达式:表达式中的运算符都是算术运算符
自增、自减运算符:前置(++/-- i 先加减1后赋值)和后置(i ++/-- 先赋值后加减1) 单目运算符(单目运算符运算优先级较高)
i=3 ; print(""%d,-i++);//-3
++ -- 不能用于常量和表达式。5++ (a+b)++ 都是不对的
算术运算符中的类型转换规则:先自动转换成同一种类型
自动转换(运算转换、赋值转换、输出转换、函数调用转换)
#include <stdio.h>
void main()
{
float a,b,c ;
a=7/2; //int3 = float 3.0
b=7/2*1.0;// 3.0
c=1.0*7/2; // 3.5
printf("a=%f,b=%f,c=%f",a,b,c);//a=3.000000,b=3.000000,c=3.500000
}
位运算符(与& 或| 取反~ 异或^ 左移<< 右移>>)
位逻辑运算符 ~ & ^ |
与& 两个都是1为1其他0 或|有一个是1就是1 两个都是0是0 异或^ 相同0不同1 取反~就是取反
移位运算符(<< >>)双目运算符 必须都是整形量 表达式1<</>>表达式2
(表达式1向左或向右移动表达式2 位 空出的位补0,表达式2一定是正整数)
例 a=00001011; a<<3; 则a=01011000 若a>>3 则 a=00000001
位运算之间的优先级 ~ << >> & ^ |
逗号运算符、逗号表达式: 表达式1,表达式2,.....表达式n -> 顺序计算表达式1~n的值
a=3*5,a*4;// a=15 表达式值=15*4=60
a=3*5,a*4,a+5;// a=15 表达式值=20
a=1;b=2;c=3; printf("",(a,b),b,c);//会输出2,2,3
其他运算符:sizeof 获取变量和数据类型所占内存的大小(字节数) sizeof 表达式/ sizeof(数据类型名或表达式)
sizeof(int) sizeov 10L L是long型
关系运算符、关系表达式: < <= == >= > != (6个)
优先级别 < <= > >= == != 高->低
逻辑运算符、逻辑表达式: ! && || 用于构造复杂表达式 (优先级 2级 11级 12级
条件运算符、条件表达式: 三目运算符 expr1 ? expr2 : expr 3 ; 用于判断条件,进行选择处理。优先级13级 very低
2>1 ? 2 : 1 ; // 2
运算符的优先级和结合性
C语言组成的基本元素