C语言常见运算符

C语言提供了丰富的运算符,这些运算符用于执行各种类型的操作,比如算术运算、比较运算、逻辑运算、位运算等。下面是一些基本的C语言运算符分类及其示例:

1. 算术运算符

  • 加法 (+) : a + b 表示a和b的和。
  • 减法 (-) : a - b 表示a和b的差。
  • 乘法 (*) : a * b 表示a和b的积。
  • 除法 (/) : a / b 表示a除以b的商(注意:结果会向0取整)。
  • 取模 (%) : a % b 表示a除以b的余数。
  • 自增 (++) : ++aa++,将a的值增加1。
  • 自减 (--) : --aa--,将a的值减少1。
cpp 复制代码
#include <stdio.h>  
  
int main() {  
    int a = 5, b = 3;  
    int sum = a + b;    // 加法  
    int difference = a - b; // 减法  
    int product = a * b; // 乘法  
    int quotient = a / b; // 除法  
    int remainder = a % b; // 取模  
  
    printf("和: %d\n", sum);  
    printf("差: %d\n", difference);  
    printf("积: %d\n", product);  
    printf("商: %d\n", quotient);  
    printf("余数: %d\n", remainder);  
  
    return 0;  
}

2. 关系运算符

  • 大于 (>) : a > b 如果a大于b,结果为真(true)。
  • 小于 (<) : a < b 如果a小于b,结果为真(true)。
  • 等于 (==) : a == b 如果a等于b,结果为真(true)。
  • 不等于 (!=) : a != b 如果a不等于b,结果为真(true)。
  • 大于等于 (>=) : a >= b 如果a大于或等于b,结果为真(true)。
  • 小于等于 (<=) : a <= b 如果a小于或等于b,结果为真(true)。
cpp 复制代码
#include <stdio.h>  
  
int main() {  
    int a = 10, b = 20;  
  
    if (a > b) {  
        printf("a大于b\n");  
    } else if (a < b) {  
        printf("a小于b\n");  
    } else {  
        printf("a等于b\n");  
    }  
  
    // 其他关系运算符示例  
    printf("a不等于b: %d\n", a != b); // 输出 1(真)  
    printf("a大于等于b: %d\n", a >= b); // 输出 0(假)  
  
    return 0;  
}

3. 逻辑运算符

  • 逻辑与 (&&) : a && b 如果a和b都为真(true),则结果为真(true)。
  • 逻辑或 (||) : a || b 如果a或b中有一个为真(true),则结果为真(true)。
  • 逻辑非 (!) : !a 如果a为假(false),则结果为真(true);反之亦然。
cpp 复制代码
#include <stdio.h>  
  
int main() {  
    int a = 1, b = 0;  
  
    if (a && b) {  
        printf("a和b都是真\n");  
    } else {  
        printf("a和b中至少有一个是假\n");  
    }  
  
    if (a || b) {  
        printf("a和b中至少有一个是真\n");  
    } else {  
        printf("a和b都是假的\n");  
    }  
  
    printf("a的否定: %d\n", !a); // 注意这里实际上会输出0(因为!a是假),但中文描述需要调整  
    // 更准确的中文描述可能是:"如果a为真,则输出假;如果a为假,则输出真。"  
    // 但由于printf直接输出的是整数值,所以这里还是保持了原始的数字输出。  
  
    return 0;  
}

4. 位运算符

  • 按位与 (&) : a & b 对a和b的每一位执行与操作。
  • 按位或 (|) : a | b 对a和b的每一位执行或操作。
  • 按位异或 (^) : a ^ b 对a和b的每一位执行异或操作。
  • 按位取反 (~) : ~a 对a的每一位执行取反操作。
  • 左移 (<<) : a << b 将a的二进制表示向左移动b位。
  • 右移 (>>) : a >> b 将a的二进制表示向右移动b位。
cpp 复制代码
#include <stdio.h>  
  
int main() {  
    unsigned int a = 5; // 二进制为 0101  
    unsigned int b = 3; // 二进制为 0011  
  
    printf("a & b: %u\n", a & b); // 0101 & 0011 = 0001  
    printf("a | b: %u\n", a | b); // 0101 | 0011 = 0111  
    printf("a ^ b: %u\n", a ^ b); // 0101 ^ 0011 = 0110  
    printf("~a: %u\n", ~a); // ~0101 = 1010...(注意这里会有补码扩展)  
    printf("a << 1: %u\n", a << 1); // 0101 << 1 = 1010  
    printf("a >> 1: %u\n", a >> 1); // 0101 >> 1 = 0010  
  
    return 0;  
}

5. 赋值运算符

  • 赋值 (=) : a = b 将b的值赋给a。
  • 复合赋值运算符 (如 +=, -=, *=, /=, %=): 它们在赋值的同时执行指定的算术运算。
cpp 复制代码
#include <stdio.h>  
  
int main() {  
    int a = 5;  
    int b;  
  
    // 简单的赋值  
    b = a;  
    printf("b = a: b = %d\n", b);  
  
    // 加法赋值  
    a += 3; // 等同于 a = a + 3;  
    printf("a += 3: a = %d\n", a);  
  
    // 乘法赋值  
    a *= 2; // 等同于 a = a * 2;  
    printf("a *= 2: a = %d\n", a);  
  
    // 位运算赋值(以左移为例)  
    a <<= 1; // 等同于 a = a << 1;  
    printf("a <<= 1: a = %d\n", a);  
  
    return 0;  
}

6. 条件运算符

  • 条件 (?:) : a ? b : c 如果a为真(true),则结果为b;否则为c。
cpp 复制代码
#include <stdio.h>  
  
int main() {  
    int a = 10, b = 20;  
    int max = (a > b) ? a : b; // 如果a大于b,则max=a,否则max=b  
    printf("较大的数是: %d\n", max);  
  
    return 0;  
}

7. 逗号运算符

  • 逗号 (,) : a, b 依次计算a和b的值,并返回b的值。
cpp 复制代码
#include <stdio.h>  
  
int main() {  
    int a = (5, 10); // 逗号运算符,a的值为10  
    printf("a的值是: %d\n", a);  
  
    // 逗号运算符在for循环中的应用  
    for (int i = 0, j = 0; i < 5; i++, j += 2) {  
        // 循环体  
    }  
  
    // 注意:上面的for循环只是展示了逗号运算符的用法,并没有实际的打印或输出  
  
    return 0;  
}

8. 指针运算符

  • 取地址 (&) : &a 获取变量a的地址。
  • 间接引用 (*) 或 解引用 : *p 获取指针p所指向地址的值。
cpp 复制代码
#include <stdio.h>  
  
int main() {  
    int var = 20;  
    int *ptr;  
  
    // 取地址运算符  
    ptr = &var;  
    printf("var的地址是: %p\n", (void*)ptr); // 注意使用%p来打印指针,并强制转换为void*以避免警告  
  
    // 解引用运算符  
    printf("var的值是: %d\n", *ptr);  
  
    return 0;  
}

9. 长度运算符

  • sizeof : sizeof(a) 返回a所占用的字节数。
cpp 复制代码
#include <stdio.h>  
  
int main() {  
    int a = 10;  
    printf("int类型的大小是: %zu字节\n", sizeof(int)); // 注意使用%zu来匹配size_t类型  
    printf("变量a的大小是: %zu字节\n", sizeof(a));  
  
    return 0;  
}

10.类型转换运算符

类型转换运算符用于将一种数据类型的值转换为另一种数据类型。

cpp 复制代码
#include <stdio.h>  
  
int main() {  
    float f = 3.14;  
    int i = (int)f; // 将float类型的f转换为int类型  
    printf("f转换为int后的值是: %d\n", i);  
  
    // 或者使用C99引入的复合字面量进行类型转换(虽然这不是运算符,但相关)  
    double d = (double){i}; // 实际上这里的转换是多余的,因为i已经是整数,但展示了类型转换的另一种形式  
    printf("i转换为double后的值是: %f\n", d);  
  
    return 0;  
}

(重点)运算符优先级

另外,也可以括号()来改变优先级

相关推荐
TeYiToKu20 分钟前
笔记整理—linux驱动开发部分(9)framebuffer驱动框架
linux·c语言·arm开发·驱动开发·笔记·嵌入式硬件·arm
互联网打工人no127 分钟前
每日一题——第一百二十四题
c语言
爱吃生蚝的于勒30 分钟前
深入学习指针(5)!!!!!!!!!!!!!!!
c语言·开发语言·数据结构·学习·计算机网络·算法
羊小猪~~34 分钟前
数据结构C语言描述2(图文结合)--有头单链表,无头单链表(两种方法),链表反转、有序链表构建、排序等操作,考研可看
c语言·数据结构·c++·考研·算法·链表·visual studio
洋2401 小时前
C语言常用标准库函数
c语言·开发语言
徐嵌2 小时前
STM32项目---畜牧定位器
c语言·stm32·单片机·物联网·iot
xinghuitunan3 小时前
蓝桥杯顺子日期(填空题)
c语言·蓝桥杯
Half-up3 小时前
C语言心型代码解析
c语言·开发语言
懒大王就是我3 小时前
C语言网络编程 -- TCP/iP协议
c语言·网络·tcp/ip
半盏茶香3 小时前
【C语言】分支和循环详解(下)猜数字游戏
c语言·开发语言·c++·算法·游戏