算数操作符:+ - * / %
int main()
{
//除号的两端都是整数,执行的为整数除法;有一端或两端为小数,执行的是小数除法
int a = 9 / 2;
printf("%d\n", a);//4
float b = 9 / 2;
printf("%f\n", b);//4.0
float c = 9 / 2.0;
printf("%f\n",c);//4.5
int d = 9 % 2;//% -取模,得到的是余数
printf("%d", d);//1
return 0;
}
移位操作符:
>>左移操作符-移动的是二进制位
<<右移操作符
int main()
{
int a = 2;
int b = a << 1;
printf("%d\n", b);//4
return 0;
}
位操作符:
&:按位与
|:按位或
^:按位异或
赋值操作符:= += -= *= /= &= ^= |= >>= <<=
int main()
{
int a = 2;
a = a + 5;
a += 5;
a = 6;
a = a - 3;
a -= 3;
a = a % 3;
a %= 3;
printf("%d", a);
return 0;
}
a+b: +有2个操作数,双面操作符
单目操作符:只有一个操作数
!:逻辑反操作
-:负值
+:正值
&:取地址
sizeof:操作数的类型长度(以字节为单位)
~:对一个数的二进制按位取反
--:前置、后置--
++:前置、后置++
(类型):强制类型转换
int main()
{
//0表示假,非0就是真
int a = 10;
printf("%d\n", !a);//0
return 0;
}
int main()
{
//sizeof是一个操作符
//不是函数
//计算类型或者变量的大小的
int a = 10;
printf("%d\n", sizeof a);
printf("%d\n",sizeof(int));
return 0;
}
int main()
{
//10
int arr[10] = { 0 };
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
return 0;
}
~按(二进制)位取反 把所有二进制中数字,1变成0,0变成1
整数在内存存储的是补码
一个整数的二进制表示有3种
原码
补码
反码
负数的计算:
-1:
100000000000000000000000000000001(原码32位)
111111111111111111111111111111110(反码)
111111111111111111111111111111111(补码)
整数的计算:原码,反码,补码相同
整数a
0
二进制:
00000000000000000000000000000000
11111111111111111111111111111111 ~a (补码)
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int a = 0;
printf("%d\n", ~a);//-1
//~安位取反
return 0;
}
++ :前置、后置++
int main()
{
int a = 10;
int b = ++a;//前置++ 先++,后使用
printf("%d\n", b);//11
printf("%d\n", a);//11
int c = 10;
int d = c++;//后置++ 先使用,后++
printf("%d\n", c);//11
printf("%d\n", d);//10
return 0;
}
(类型):强制类型转换
int main()
{
//强制类型转换
int a = (int)3.14;
printf("%d\n", a);
return 0;
}
关系操作符
>
>=
<
<=
!= 用于测试“不相等”
==用于测试“相等”
逻辑操作符
&& 逻辑与
|| 逻辑或
int main()
{
int a = 3;
int b = 5;
int c = a && b;
printf("%d\n", c);//1 真
//if (a && b)
//{
//}
int d = 0;
int e = a && d;
printf("%d\n", e);//0假
int f = a || d;
printf("%d\n", f);//1真
int h = 0;
int g = h && d;
printf("%d\n", g);//0假
return 0;
}
条件操作符(三目操作符)
exp1?exp2:exp3
(exp1,exp2,exp3为三个表达式(操作数))
exp1如果成立,exp2计算,整个表达式的结果是:exp2的结果
exp1如果不成立,exp3计算,整个表达式的结果是:exp3的结果
int main()
{
int a = 0;
int b = 3;
int max = 0;
/*if (a > b)
max = a;
else
max = b;*/
max=a > b ? a : b;
printf("%d\n", max);
return 0;
}
逗号表达式:逗号隔开的一串表达式
exp1,exp2,exp3,...expN
int main()
{
//(2, 4 + 5, 6);
int a = 0;
int b = 3;
int c = 5;
//a=5 c=1 b=3
int d = (a = b + 2, c = a - 4, b = c + 2); //d=3
//逗号表达式,是从左向右依次计算
//整个表达式的结果是最后一个表达式的结果
printf("%d\n", d);//3
return 0;
}
下标引用、函数调用和结构成员
() [ ] . ->
下标引用操作符
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
printf("%d", arr[5]);//[]下标引用操作符
return 0;
}
函数调用操作符
int main()
{
//调用函数的时候,函数名后面的()就是函数调用操作符
printf("hello\n");
printf("%d", 100);
return 0;
}