三、运算符与表达式:算术运算符;赋值运算符;关系运算符;逻辑运算符;杂项运算符:sizeof()、&、*、三目运算? :、逗号运算符;运算符优先级;类型转换
运算符类型 作用
算术运算符 用于处理四则运算
赋值运算符 用于将表达式的值赋给变量
比较运算符 用于表达式的比较,并返回一个真值或假值
逻辑运算符 用于根据表达式的值返回真值或假值
位运算符 用于处理数据的位运算
sizeof运算符 用于求字节数长度

算术运算符 ============================================================================= 运算符 描述 实例 + 把两个操作数相加 A + B 将得到 30 - 从第一个操作数中减去第二个操作数 A - B 将得到 -10 * 把两个操作数相乘 A * B 将得到 200 / 分子除以分母 B / A 将得到 2 % 取模运算符,整除后的余数 B % A 将得到 0 ++ 自增运算符,整数值增加 1 A++ 将得到 11 -- 自减运算符,整数值减少 1 A-- 将得到 9 不允许对小数取余。余数不能是 小数。 35 % 3.4; 对负数取余,结果为余数的绝对值。10 % -3; --》 1

赋值运算符 ============================================================================= 运算符 描述 实例 = 简单的赋值运算符,把右边操作数的值赋给左边操作数 C = A + B 将把 A + B 的值赋给 C += 加且赋值运算符,把右边操作数加上左边操作数的结果赋值给左边操作数 C += A 相当于 C = C + A -= 减且赋值运算符,把左边操作数减去右边操作数的结果赋值给左边操作数 C -= A 相当于 C = C - A *= 乘且赋值运算符,把右边操作数乘以左边操作数的结果赋值给左边操作数 C *= A 相当于 C = C * A /= 除且赋值运算符,把左边操作数除以右边操作数的结果赋值给左边操作数 C /= A 相当于 C = C / A %= 求模且赋值运算符,求两个操作数的模赋值给左边操作数 C %= A 相当于 C = C % A <<= 左移且赋值运算符 C <<= 2 等同于 C = C << 2 >>= 右移且赋值运算符 C >>= 2 等同于 C = C >> 2 &= 按位与且赋值运算符 C &= 2 等同于 C = C & 2 ^= 按位异或且赋值运算符 C ^= 2 等同于 C = C ^ 2 |= 按位或且赋值运算符 C |= 2 等同于 C = C | 2

关系运算符 ============================================================================= C 语言的比较运算中, “真”用数字“1”来表示, “假”用数字“0”来表示。 运算符 描述 实例 == 检查两个操作数的值是否相等,如果相等则条件为真。 (A == B) 为假。 != 检查两个操作数的值是否相等,如果不相等则条件为真。 (A != B) 为真。 > 检查左操作数的值是否大于右操作数的值,如果是则条件为真。 (A > B) 为假。 < 检查左操作数的值是否小于右操作数的值,如果是则条件为真。 (A < B) 为真。 >= 检查左操作数的值是否大于或等于右操作数的值,如果是则条件为真。 (A >= B) 为假。 <= 检查左操作数的值是否小于或等于右操作数的值,如果是则条件为真。 (A <= B) 为真。

逻辑运算符 ============================================================================= C 语言的比较运算中, “真”用数字“1”来表示, “假”用数字“0”来表示。 运算符 描述 实例 && 称为逻辑与运算符。如果两个操作数都非零,则条件为真。 (A && B) 为假。 || 称为逻辑或运算符。如果两个操作数中有任意一个非零,则条件为真。 (A || B) 为真。 ! 称为逻辑非运算符。用来逆转操作数的逻辑状态。如果条件为真则逻辑非运算符将使其为假。 !(A && B) 为真 !非0整数 ---> 0 !0 ---> 1
位运算符:位运算符作用于位,并逐位执行操作。

杂项运算符:sizeof()、&、*、三目运算? :、逗号运算符 ============================================================================= 运算符 描述 实例 sizeof() 返回变量的大小。 sizeof(a) 将返回 4,其中 a 是整数。 & 返回变量的地址。 &a; 将给出变量的实际地址。 * 指向一个变量。 *a; 将指向一个变量。 ? : 条件表达式 如果条件为真 ? 则值为 X : 否则值为 Y , 逗号运算符 --------------------------------------------------------------------------------- 三目运算符: ? : 表达式1 ? 表达式2 : 表达式3 表达式1 是一个判别表达式。 如果为真。整个三目运算,取值表达式2。 如果为假。整个三目运算,取值表达式3。 默认结合性。自右向左。 --------------------------------------------------------------------------------- // 逗号运算符 int main(void) { int a = 10, b = 20, c = 30; int x = (a = 1, c = 5, b = 2); // 逗号运算符。 //逗号运算符:会执行各个表达式,然后将最后一个表达式的值赋值给x,所以此处x=2 printf("x = %d\n", x); printf("a = %d\n", a); printf("b = %d\n", b); printf("c = %d\n", c); system("pause"); return EXIT_SUCCESS; }

类型转换种类;自动转换(隐式转换);强制类型转换 ======================================================================== 类型转换 数据有不同的类型,不同类型数据之间进行混合运算时必然涉及到类型的转换问题。 转换的方法有两种: 自动转换(隐式转换):遵循一定的规则,由编译系统自动完成。 强制类型转换:把表达式的运算结果强制转换成所需的数据类型。 -------------------------------------------------------------------------- 自动转换规则: 占用内存字节数少(值域小)的类型,向占用内存字节数多(值域大)的类型转换,以保证精度不降低。 由编译器自动完成。 由赋值产生的类型转换。 小--》大 没问题。 大 --》 小 有可能发生数据丢失。 高 double <--- float ^ ^ | | | long | ^ | | | unsignen int | ^ | | 低 signen int <--- char,short --------------------------------- 示例: int r = 3; float s = 3.14 * r * r; //隐含了2次类型转换:1.在做乘法时,r是int类型,3.14是double类型,都需要转换为double类型再进行计算;2.在赋值时进行类型转换,表达式的结果是double类型,但是要赋值给float,需要进行类型转换 ------------------------------- int a = 321; char ch = a; //隐式类型转换,int转换为char类型,int 4字节,char1字节,所以会丢数据 打印以%d来打印ch,结果显示为65,说明char使用了int的最后一个字节,其他都丢弃了。。。 // 隐式类型转换。 int main(void) { int a = 321; char ch = a; printf("ch = %d\n", ch); system("pause"); return EXIT_SUCCESS; } int main(void) { int a = 321; char ch = a; printf("%d\n", ch); //65 //隐式类型转换,int转换为char类型,int 4字节,char1字节,所以会丢数据 printf("%c\n", ch); //A printf("112233\n" ); //字符串是可以直接打印的 //printf(a ); //变量不能直接打印,会报错 //printf("%s", ch); //这个也报错,应该是后续没碰到\0,碰到了一些莫名其妙的东西,或者说win10的vs进行了优化吧。。。 //printf(ch); //变量不能直接打印,会报错 system("pause"); return EXIT_SUCCESS; } -------------------------------------------------------------------------- 强制类型转换: 语法: (type_name) expression 大多数用于函数调用期间,实参给形参传值。 // 强制类型转换 int main(int var) { //int *p = (int *)malloc(100); //强制类型转换 float price = 3.6; int weight = 4; //double sum = (int)price * weight; //强制类型转换 double sum = (int)(price * weight); //强制类型转换 printf("价格:%lf\n", sum); system("pause"); return EXIT_SUCCESS; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!