目录
1.算术操作符
2.移位操作符
3.位操作符
4.赋值操作符
5.单目操作符
6.关系操作符
7.逻辑操作符
8.条件操作符(三目操作符)
9.逗号操作符
10.其他操作符
C语言中的操作符是用于执行特定操作(如算术运算、逻辑判断、位操作等)的符号。它们可以作用于变量、常量、表达式等,以产生新的值或执行特定的动作。C语言中的操作符可以分为多个类别,包括算术操作符、关系操作符(或比较操作符)、逻辑操作符、位操作符、赋值操作符、条件操作符、逗号操作符等。
+
: 加法-
: 减法*
: 乘法/
: 除法%
: 取模(求余数)int main()
{
int a= 6 / 5; //取整:得到的结果为1
printf("%d\n", a);
float b = 6.0 / 5; //只要除号两边有一个小数,得到的结果就为小数
printf("%f\n", b);
int c = 7 % 3; //取模:得到的结果为1
printf("%d\n", c);
return 0;
}
int main()
{
int a = 2; //00000000 00000000 00000000 00000010
int b = a << 1; //把a的二进制位向左移动一位:00000000 00000000 00000000 00000100
printf("b = %d\n", b);
int c = 10; //00000000 00000000 00000000 00001010
int d = c >> 1; //00000000 00000000 00000000 00000101
printf("d = %d\n", d);
int e = -1; //负数存放的是二进制的补码
//原码:10000000 00000000 00000000 00000001
//反码:11111111 11111111 11111111 11111110
//补码:11111111 11111111 11111111 11111111
int f = e >> 1; //11111111 11111111 11111111 11111111
printf("f = %d\n", f);
return 0;
}
int main()
{
int a = 3; //00000000 00000000 00000000 00000011
int b = 5; //00000000 00000000 00000000 00000101
int c = a & b; //00000000 00000000 00000000 00000001 - 1
int d = a | b; //00000000 00000000 00000000 00000111 - 7
int e = a^b; //00000000 00000000 00000000 00000110 - 6
printf("c = %d\n", c);
printf("d = %d\n", d);
printf("e = %d\n", e);
return 0;
}
int main()
{
int a = 10;
a = 100;
a = a + 100; //和下面的一样
a += 100;
return 0;
}
(1)取反 - !
int main()
{
int flag = 0; //1为真,0为假
//flag为真,打印hehe
if (flag)
{
printf("hehe\n");
}
//flag为假,打印haha
if (!flag)
{
printf("haha\n");
}
return 0;
}
(2)负值 - -
int main()
{
int a = 10;
a = -a;
printf("%d\n", a);
return 0;
}
(3)sizeof 用法
int main()
{
//sizeof是一个操作符
int a = 10;
char arr[10] = { 0 };
printf("%d\n", sizeof(a)); //计算a所占空间的大小,单位为字节
printf("%d\n", sizeof(int)); //也可以放类型
short s = 5; //char占一个字节;short占一个字节;int占四个字节
int b = 10;
printf("\n%d\n", sizeof(s = b + 2)); //2(sizeof括号中的表达式不参与运算的)
printf("%d\n", s); //5
return 0;
}
(4)按位取反 - ~
int main()
{
int a = -1; //10000000 0000000 00000000 00000001 - 原码
//11111111 1111111 11111111 11111110 - 反码
//11111111 1111111 11111111 11111111 - 补码
int b = ~ a; //00000000 0000000 00000000 00000000 - 二进制按位取反
printf("%d\n", b);
return 0;
}
(5)++和--,分为前置和后置
int main()
{
//后置:先使用,再加减;
//前置:先加减,在使用。
//int a = 10;
//int b = a++; //后置++:先使用再加(先赋值给b,再加加)
//printf("%d\n", a); //11
//printf("%d\n", b); //10
int a = 10;
int b = ++a; //前置++:先加再使用
printf("%d\n", a); //11
printf("%d\n", b); //11
return 0;
}
(6)取地址 - &
int main()
{
int a = 10;
printf("%p\n",&a); //取地址
int * pa = &a; //pa是用来存放地址的- pa是一个指针变量
*pa = 20; //* - 间接访问操作
printf("%d\n", a);
return 0;
}
(7)强制类型转换 - ()
int main()
{
int a = (int)3.14; //强制类型转换
printf("%d\n", a);
return 0;
}
>、>=、<、<=、!=(用于表示不相等)、==(用于表示相等)
int main()
{
int a = 3;
int b = 0;
if (a && b)
{
printf("hehe\n");
}
else
printf("haha\n");
return 0;
}
int main()
{
int i = 0, a = 0, b = 2, c = 3, d = 4;
i = a++ && ++b && d++; //1 2 3 4
i = a++ || ++b || d++; //1 3 3 4
printf("a= %d\nb= %d\nc= %d\nd= %d\n", a, b, c, d);
return 0;
}
具体结构:exp1?exp2:exp3 - 1为真,执行2;否者执行3.
int main()
{
int a = 3;
int b = 0;
//if (a > 5)
// b = 1;
//else
// b = -1;
//三目操作符
b = (a > 5 ? 1 : -1);
printf("%d\n", b);
return 0;
}
逗号隔开的一串表达式
int main()
{
int a = 3;
int b = 5;
int c = 0;
//逗号表达式 - 从左向右依次计算,但是整个表达式的结果是最后一个表达式的结果
int d = (c = 5, a = c + 3, b = a - 4, c += 5);
printf("%d\n", d);
return 0;
}
(1)下标引用操作符 - []
int main()
{
int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
printf("%d\n", arr[5]); //[] - 下标引用操作符
return 0;
}
2)函数调用操作符 - () - 接受一个或者多个操作数:第一个操作数是函数名,剩余的操作数就是传递给函数的参数
int add(int x, int y) //函数的定义
{
return x + y;
}
int main()
{
int a = 10;
int b = 20;
int ret = add(a, b); //() - 函数调用操作符
return 0;
}
(3)结构成员访问操作符 - . 和 ->。
struct Book //创建了一个自定义结构体
{
char name[10];
char id[20];
int price;
};
int main()
{
struct Book b = { "C语言", "C374587299", 55 };
struct Book * pb = &b;
//结构体指针->成员名
printf("书名:%s\n", pb->name);
printf("书号:%s\n", pb->id);
printf("价格:%d\n", pb->price);
//结构体变量名.成员名
//printf("书名:%s\n", b.name);
//printf("书号:%s\n", b.id);
//printf("价格:%d\n", b.price);
return 0;
}