算数操作符:+ - * / %
int main()
{
int a = 9 / 2;
printf("%d\n", a); //输出4,,除号两端都是整数执行证书除法,输出整数
float b = 9 / 2.0;
printf("%f\n", b);//除号两端有一端是小数,则输出结果为小数
int c = 9 % 2; //取模(取余)运算符
printf("%d\n", c); //输出1
return 0;
}
移位操作符:>> <<
int main()
{
int a = 2;
int b = a << 1; //a的二进制位左移一位,10变成100
printf("%d\n", b); //输出结果为4
return 0;
}
位操作符:&:按位与,二元运算符,只有两个运算对象中对应的位都为1时,结果才为1
|:按位与,二元运算符,如果两个运算符对象中的一个位为真或两个位都为真,结果为真
^:按位异或,二元运算符,如果两个运算对象中相应的一个位为真且不是两个位同为1,结果为真
赋值操作符 = += -= *= /= &= ^= |= >>= <<=
int main()
{
int a = 2;
a += 5;//相当于 a = a + 5;
int b = 2;
b -= 3;//相当于 b = b - 3;
int c = 2;
c %= 1;//相当于 c = c % 1;
return 0;
}
单目操作符:对应双目(二元)操作符,优先级最高。
!逻辑取反, - 负值, +正值, & 取地址, sizeof 操作数的类型长度(以字节为单位),
~ 对一个数的二进制按位取反, -- 前置、后置--, ++ 前置、后置++,
* 间接访问操作符(解引用操作符), (类型)强制类型转换。
//!逻辑取反
int main()
{
//0表示假,非0表示真
int a = 0;
printf("%d\n", !a); //a为假,!a为真,输出1
int b = 10;
printf("%d\n", !b); //b为真,!b为假,输出0
return 0;
}
//sizeof计算大小
int main()
{
int a = 1;
printf("%d\n", sizeof(int));//输出4
printf("%d\n", sizeof (a)); //输出4
int arr[10] = { 0 }; //创建一个10个元素的数组
printf("%d\n", sizeof(arr)); //输出为40
printf("%d\n", sizeof(arr[0])); //输出为4
//计算数组元素个数
int sz = sizeof(arr) / sizeof(arr[0]);
printf("%d\n", sz); //数组含有10个元素,输出为10
return 0;
}
//~按位取反,即把所有二进制位中1变成0,0变成1(包括符号位)
int main()
{
int a = 0;
printf("%d\n", ~a);//输出-1
//0按位取反后二进制为32个1(补码),转换成十进制为-1
return 0;
}
原码、反码、补码:
正数原码、反码、补码相同
负数:符号位(第一位)1表示负,0表示正,数学大小用二进制表示即为原码,
原码符号位不变,其余位数取反得到反码,
反码加1得到补码,补码先取反再加1得到原码
//前置++ 先++,再使用
int main()
{
int a = 10;
int b = ++a;
printf("%d\n", b); //输出为11
printf("%d\n", a); //输出为11
return 0;
}
//后置++ 先使用,再++
int main()
{
int a = 10;
int b = a++;
printf("%d\n", b); //输出10
printf("%d\n", a); //输出11
return 0;
}
//强制类型转换
int main()
{
int a = (int)3.14; //将浮点数转换成整型
printf("%d\n", a);
return 0;
}
关系操作符 :> ,>= ,< ,<= ,== ,!=
逻辑操作符
&&:逻辑与
||:逻辑或
//&&逻辑与
int main()
{
int a = 1;
int b = 0;
int c = a && b; //有一个假即为假
printf("%d\n", c); //输出为0
return 0;
}
//||逻辑或
int main()
{
int a = 1;
int b = 0;
int c = a || b; //有一个为真即为真
printf("%d\n", c); //输出为1
return 0;
}
条件操作符(三目操作符):
exp1 ? exp2 : exp3
若exp1成立,计算exp2,整个表达式的结果为exp2的结果
若exp1不成立,计算exp3,整个表达式的结果为exp3的结果
int main()
{
int a = 1;
int b = 2;
int max = 0;
max = a > b ? a : b;
/*相当于
if (a > b)
{
max = a;
printf("%d\n", max);
}
else
{
max = b;
printf("%d\n", max);
}*/
printf("%d\n", max);
return 0;
}
逗号表达式:逗号隔开的一串表达式
int main()
{
int a = 6;
int b = 5;
int c = 2;
int d = (b = a + 3, c = b - 5, a = c + 1);
//从左向右依次计算,整个表达式的结果是最后一个表达式的结果
printf("%d\n", d);//输出5
return 0;
}
下标引用操作符:[]
int main()
{
int arr[10] = {1,2,3,4,5,6,7,8,9,10 };
printf("%d\n", arr[5]);//arr[5]中的[]即为下表引用操作符
return 0;
}
函数调用操作符:()
结构成员操作符:. ->