算术操作符
+加 -减 *乘 /除商 %模余
浮点数得到小数(/商,double,%lf)
移位操作符(整数)
移动的是二进制位
不要移动负数位
< < 左移操作符
左边丢弃,右边补0
>>右移操作符
1.算数右移:右边丢弃,左边补原符号位
2.逻辑右移:右边丢弃,左边补0
位操作符(整数)
& 按位与(2进制位)
| 按位或(2进制位)
^ 按位异或(2进制位)相同为0,相异为1
赋值操作符(=)
符合赋值符
+= -= *= /= %= >>= <<= &= |= ^=
单目操作符(只有一个操作数)
!逻辑反操作 -负值 +正值 &取地址 *解引用操作符 ~按位取反正(2进制位)
sizeof计算变量所占内存空间的大小,单位字节
-- ++前置、后置
关系操作符
> >= < <= != ==
逻辑操作符
&& 逻辑与(左为假,后面不计算)
|| 逻辑或(左为真,后面不计算)
条件操作符(三目操作符)
exp1?exp2:exp3
逗号表达式
从左往右依次计算,整个表达式的结果是最后一个表达式的结果。
[ ]下标引用操作符
( )函数调用操作符
struct结构体
创建一个结构体类型
struct duixiang
{
char name[10];
int age;
}
int main()
{
struct duixiang n1 = { };
printf("%s\n",n1.name);
struct duixiang* p = &n1;
printf ("%s\n",(*p).name);
printf ("%s\n",p->name);
}
表达式求值:
表达式求值的顺序是由操作符的优先级和结合性决定的。
隐式类型转换:
1.整型提升:先提示为普通整型,再进行运算。运算完成后,结果将被截断,然后再存储。有符号数看符号补,无符号数补0。
(+c,-c)会整型提升,为四个字节。
2.算术转换:
long double
double
float
unsigned long int
long int
unsigned int
int
小的类型转换为大的类型再进行计算