如何理解C语言中的操作符?

1、操作符的分类

算术操作符: + - * / %
移位操作符: << >>
位操作符:      & | ^
赋值操作符: = += -= *= /= %= <<= >>= &= |= ^=
单⽬操作符: !、 ++ -- & * + - ~ sizeof
关系操作符: > >= < <= == !=
逻辑操作符: && ||
条件操作符: ? :
逗号表达式: ,
下标引⽤: []
函数调⽤: ()
结构成员访问: . ->

2、⼆进制和进制转换(番外)

常用到的有:二进制,八进制,十六进制

二进制转十进制:采用位权展开法。将二进制数的每一位乘以2的相应位数次幂,然后将结果相加。例如,二进制数1011转换为十进制:

1x2^3 + 1x0^2 + 1x2^1 + 1x2^0 = 8+0+2+1 = 11

十进制转二进制: 整数部分采用除2取余法,将十进制数除以2,取余数,然后将商继续除以2,直到商为0,将余数从下往上排列就是二进制数。例如,将十进制11转换为二进制:

11 / 2 = 5 ...... 1

5 / 2 = 2 ...... 1

2 / 2 = 1 ...... 0

1 / 2 = 0 ...... 1                          所以11的二进制为1 0 1 1

二进制转八进制:

以小数点为界,将二进制数每三位分为一组,不足三位的在两端补0,然后将每组二进制数转换为对应的八进制数字。例如,二进制数1 1 0 1 1转换为八进制:先分组为011 010 ,对应的八进制数为32   (↓计算过程)

0x2^2 + 1x2^1 + 1x2^0 =  3               0x2^2 + 1x2^1 + 0x2^0 = 2    

3、移位操作符

+    -   *   /   %

(1)加法运算符 (+)

用于将两个操作数相加

(2)减法运算符(-)

从第一个操作数中减去第二个操作数。

(3)乘法运算符( * )

:将两个操作数相乘。

(4)除法运算符(/)

用第一个操作数除以第二个操作数。如果两个操作数都是整数,则结果也是整数,会舍去小数部分。

(5)取模运算符( % )

:计算两个整数相除的余数,该运算符只能用于整数操作数。

5/3=1......2

4、 位操作符:&、|、^、~

(1)按位与运算符( & )


 :对两个操作数的对应二进制位进行逻辑与运算,只有当两个对应位都为1时,结果位才为1,否则为0。

(2)按位或运算符( | ) 


:对两个操作数的对应二进制位进行逻辑或运算,只要两个对应位中有一个为1,结果位就为1,只有当两个对应位都为0时,结果位才为0。

(3)按位异或运算符( ^ ) 


:对两个操作数的对应二进制位进行逻辑异或运算,当两个对应位不同时,结果位为1,相同时结果位为0。

(4)按位取反运算符( ~ ) 


:对操作数的每一位进行取反操作,即将0变为1,1变为0。

5. 单⽬操作符

单目操作符介绍

!              逻辑反操作
-              负值
+             正值
&             取地址
sizeof      操作数的类型长度(以字节为单位)
~              对一个数的二进制按位取反
--              前置、后置--
++            前置、后置++
*               间接访问操作符(解引用操作符)
(类型)       强制类型转换

6. 逗号表达式

逗号表达式,就是用逗号隔开的多个表达式。
逗号表达式,从左向右依次执行。整个表达式的结果是最后一个表达式的结果。
#include <stdio.h>

int main() {
    int x, y;
    // 逗号表达式中包含赋值操作,先将3赋给x,再将x + 1的值赋给y
    (x = 3, y = x + 1);
    // 输出x和y的值
    printf("x的值为:%d\n", x);//3
    printf("y的值为:%d\n", y);//4

    return 0;
}

8. 下标访问[ ]、函数调⽤()

[ ] 下标引用操作符

int arr[10];//创建数组
//↓ 使用下标引用操作符 ,这里的9是数组arr中的第10个元素(因为下标从0开始)
arr[9] = 10;

函数调用()

以下是函数调用的基本步骤:
定义函数:包括函数的返回类型、函数名、参数列表(可以为空)以及函数体。
调用函数:在需要执行该函数功能的地方,使用函数名和相应的参数(如果有)来触发函数的执行。

#include <stdio.h>

// 函数定义:计算两个整数的和
int add(int a, int b) {
    return a + b;
}

int main() {
    int num1 = 5;
    int num2 = 3;
    // 函数调用,将num1和num2作为参数传递给add函数
    int result = add(num1, num2);
    printf("两数之和为: %d\n", result);
    return 0;
}

 add  函数被定义,它接受两个  int  类型的参数  a  和  b ,返回它们的和。
在  main  函数中,定义了两个整数  num1  和  num2 ,然后通过  add(num1, num2)  调用  add  函数,将  num1  和  num2  的值传递给  add  函数。 add  函数执行加法运算并返回结果,这个结果被赋值给  result  变量,最后打印出来。

↓再来一个五参数且无返回值的函数:

#include <stdio.h>

// 函数定义:打印一条问候语
void greet() {
    printf("Hello, world!\n");
}

int main() {
    // 函数调用
    greet();
    return 0;
}

这里的 greet  函数没有参数,也不返回任何值(返回类型为 void )。在 main  函数中通过 greet()  调用该函数,它会直接在控制台打印出问候语。

9. 结构成员访问操作符

点操作符(.)

:用于通过结构变量访问其成员。当你有一个结构类型的变量时,可以使用点操作符来访问该结构中的成员。

#include <stdio.h>

// 定义一个结构体
struct Student {
    char name[20];
    int age;
};
int main() {
    struct Student stu;
    // 使用点操作符访问结构体成员并赋值
    strcpy(stu.name, "Tom");
    stu.age = 20;
    // 使用点操作符访问结构体成员并输出
    printf("姓名:%s,年龄:%d\n", stu.name, stu.age);
    return 0;
}

箭头操作符( -> )
 :用于通过指向结构的指针访问结构成员。当你有一个指向结构的指针时,需要使用箭头操作符来访问所指向结构的成员。

#include <stdio.h>
#include <string.h>
//定义一个结构体
struct Student {
    char name[20];
    int age;
};
int main() {
    struct Student stu;
    struct Student *pStu = &stu;
    // 使用箭头操作符访问结构体成员并赋值
    strcpy(pStu->name, "Jerry");
    pStu->age = 21;
    // 使用箭头操作符访问结构体成员并输出
    printf("姓名:%s,年龄:%d\n", pStu->name, pStu->age);
    return 0;
}

10. 操作符的属性:优先级、结合性

优先级
 含义:操作符的优先级决定了在一个复杂表达式中,哪些操作会先执行,哪些会后执行。优先级高的操作符会先于优先级低的操作符进行计算。
示例:在表达式 3 + 4 * 2 中,乘法 * 的优先级高于加法 + ,所以先计算 4 * 2 ,得到8,然后再计算 3 + 8 ,最终结果为11。

结合性
含义:当一个表达式中出现多个优先级相同的操作符时,结合性决定了这些操作符的计算顺序。结合性分为左结合和右结合。左结合的操作符从左到右进行计算,右结合的操作符从右到左进行计算。
示例:对于加法和减法,它们的优先级相同且都是左结合。在表达式 9 - 3 + 2 中,先计算 9 - 3 得到6,再计算 6 + 2 得到8。对于赋值操作符 = ,它是右结合的。在语句 a = b = 5 中,先将5赋给 b ,然后再将 b 的值赋给 a 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

今天学习了么!?

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值