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的余数。
  • 自增 (++)++a 或 a++,将a的值增加1。
  • 自减 (--)--a 或 a--,将a的值减少1。
#include   
  
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)。
#include   
  
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);反之亦然。
#include   
  
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位。
#include   
  
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。
  • 复合赋值运算符(如 +=-=*=/=%=): 它们在赋值的同时执行指定的算术运算。
#include   
  
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。
#include   
  
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的值。
#include   
  
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所指向地址的值。
#include   
  
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. 长度运算符

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

10.类型转换运算符

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

#include   
  
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;  
}

(重点)运算符优先级

C语言常见运算符_第1张图片

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

你可能感兴趣的:(C语言,c语言)