C 算术运算符
| 操作员 | 运算符的含义 | 
|---|---|
| + | 加法或一元加法 | 
| - | 减法或一元减法 | 
| * | 乘法 | 
| / | 分配 | 
| % | 除法后的余数(模除) | 
// 算数运算符的使用
#include <stdio.h>
int main()
{
    int a = 9,b = 4, c;
    
    c = a+b;
    printf("a+b = %d \n",c);
    c = a-b;
    printf("a-b = %d \n",c);
    c = a*b;
    printf("a*b = %d \n",c);
    c = a/b;
    printf("a/b = %d \n",c);
    c = a%b;
    printf("a除以b的余数为 b= %d \n",c);
    
    return 0;
} 
C 自增和自减运算符
C 编程有两个运算符递增++和递减,--用于将操作数(常量或变量)的值更改 1。
增量++将值增加 1,而减量--将值减少 1。这两个运算符是一元运算符,这意味着它们仅对单个操作数进行操作。
// 自增自减运算符的使用
#include <stdio.h>
int main()
{
    int a = 10, b = 100;
    float c = 10.5, d = 100.5;
    printf("++a = %d \n", ++a);
    printf("--b = %d \n", --b);
    printf("++c = %f \n", ++c);
    printf("--d = %f \n", --d);
    return 0;
}
C 赋值运算符
| 运算符 | 举例 | 相等 | 
|---|---|---|
| = | a = b | a = b | 
| += | a += b | a = a+b | 
| -= | a -= b | a = a-b | 
| *= | a *= b | a = a*b | 
| /= | a /= b | a = a/b | 
| %= | a %= b | a = a%b | 
//赋值运算符的使用
#include <stdio.h>
int main()
{
    int a = 5, c;
    c = a;      // c 为 5
    printf("c = %d\n", c);
    c += a;     // c 为 10 
    printf("c = %d\n", c);
    c -= a;     // c 为 5
    printf("c = %d\n", c);
    c *= a;     // c 为 25
    printf("c = %d\n", c);
    c /= a;     // 为 is 5
    printf("c = %d\n", c);
    c %= a;     // c = 0
    printf("c = %d\n", c);
    return 0;
}
C 关系运算符
| 操作员 | 运算符的含义 | 例子 | 
|---|---|---|
| == | 等于 | 5 == 3被评估为 0 | 
| > | 大于 | 5 > 3被评估为 1 | 
| < | 少于 | 5 < 3被评估为 0 | 
| != | 不等于 | 5 != 3被评估为 1 | 
| >= | 大于或等于 | 5 >= 3被评估为 1 | 
| <= | 小于或等于 | 5 <= 3被评估为 0 | 
// 关系运算符的使用
#include <stdio.h>
int main()
{
    int a = 5, b = 5, c = 10;
    printf("%d == %d 是 %d \n", a, b, a == b);
    printf("%d == %d 是 %d \n", a, c, a == c);
    printf("%d > %d 是 %d \n", a, b, a > b);
    printf("%d > %d 是 %d \n", a, c, a > c);
    printf("%d < %d 是 %d \n", a, b, a < b);
    printf("%d < %d 是 %d \n", a, c, a < c);
    printf("%d != %d 是 %d \n", a, b, a != b);
    printf("%d != %d 是 %d \n", a, c, a != c);
    printf("%d >= %d 是 %d \n", a, b, a >= b);
    printf("%d >= %d 是 %d \n", a, c, a >= c);
    printf("%d <= %d 是 %d \n", a, b, a <= b);
    printf("%d <= %d 是 %d \n", a, c, a <= c);
    return 0;
} 
C 逻辑运算符
包含逻辑运算符的表达式返回 0 或 1,具体取决于表达式结果是 true 还是 false。逻辑运算符常用于C 编程中的决策。
| 操作员 | 意义 | 例子 | 
|---|---|---|
| && | 逻辑与。仅当所有操作数都为真时才为真 | 如果 c = 5 且 d = 2,则表达式 ((c==5) && (d>5))等于 0。 | 
| || | 逻辑或。仅当任一操作数为真时才为真 | 如果 c = 5 且 d = 2,则表达式 ((c==5) || (d>5))等于 1。 | 
| ! | 逻辑非。仅当操作数为 0 时才为 True | 如果 c = 5,则表达式 !(c==5)等于 0。 | 
// 逻辑运算符的使用规则
#include <stdio.h>
int main()
{
    int a = 5, b = 5, c = 10, result;   //result 用来存放结果
    result = (a == b) && (c > b);
    printf("(a == b) && (c > b) is %d \n", result);
    result = (a == b) && (c < b);
    printf("(a == b) && (c < b) is %d \n", result);
    result = (a == b) || (c < b);
    printf("(a == b) || (c < b) is %d \n", result);
    result = (a != b) || (c < b);
    printf("(a != b) || (c < b) is %d \n", result);
    result = !(a != b);
    printf("!(a != b) is %d \n", result);
    result = !(a == b);
    printf("!(a == b) is %d \n", result);
    return 0;
}
输出
(a == b) && (c > b) 为 1 
(a == b) && (c < b) 为 0 
(a == b) || (c < b) 是 1 
(a != b) || (c < b) 为 0 
!(a != b) 为 1 
!(a == b) 为 0- (a == b) && (c > 5)计算结果为 1,因为两个操作数- (a == b)和- (c > b)都是 1(真)。
- (a == b) && (c < b)计算结果为 0,因为操作数- (c < b)为 0(假)。
- (a == b) || (c < b)计算结果为 1,因为- (a = b)为 1(真)。
- (a != b) || (c < b)计算结果为 0,因为操作数- (a != b)和- (c < b)均为 0(假)。
- !(a != b)计算结果为 1,因为操作数- (a != b)为 0(假)。因此,!(a != b) 为 1(真)。
- !(a == b)计算结果为 0,因为- (a == b)为 1(真)。因此,- !(a == b)为 0(假)。
C 位运算符
在计算过程中,加法、减法、乘法、除法等数学运算被转换为位级,这使得处理速度更快并节省功耗。
位运算符在 C 编程中用于执行位级运算。
| 运营商 | 运算符的含义 | 
|---|---|
| & | 按位与 | 
| | | 按位或 | 
| ^ | 按位异或 | 
| ~ | 按位求补 | 
| << | 左移 | 
| >> | 右移 | 
按位与运算符 &
如果两个操作数的相应位为1,则按位 AND 的输出为1。如果操作数的任一位为0,则相应位的结果将计算为0。
在 C 编程中,按位 AND 运算符用 表示&。
让我们假设两个整数12和25的按位 AND 运算。
12 = 00001100(二进制) 25 = 00011001(二进制) 12和25的位运算 00001100 & 00011001 ________ 00001000 = 8(十进制)
事例按位与
#include <stdio.h>
int main() {
    int a = 12, b = 25;
    printf("Output = %d", a & b);
    return 0;
}结果
输出=8按位或运算符 |
如果两个操作数的至少一个对应位为1,则按位 OR 的输出为1。在 C 编程中,按位 OR 运算符用 表示|。
12 = 00001100(二进制) 25 = 00011001(二进制) 12 和 25 的按位或运算 00001100 | 00011001 ________ 00011101 = 29(十进制)
#include <stdio.h>
int main() {
    int a = 12, b = 25;
    printf("Output = %d", a | b);
    return 0;
}结果
输出 = 29按位 XOR(异或)运算符 ^
如果两个操作数的相应位相反,则按位异或运算符的结果为1 。它用 表示^。
12 = 00001100(二进制) 25 = 00011001(二进制) 12 和 25 的按位异或运算 00001100 ^00011001 ________ 00010101 = 21(十进制)
#include <stdio.h>
int main() {
    int a = 12, b = 25;
    printf("Output = %d", a ^ b);
    return 0;
}结果
输出 = 21按位补码运算符 ~
按位求补运算符是一种一元运算符(仅适用于一个操作数)。它将1更改为0,将0更改为1。它用 表示~。
35 = 00100011(二进制) 35 的按位求补运算 ~ 00100011 ________ 11011100 = 220(十进制)
C 编程中按位补码运算符的扭转
35 ( )的按位补码~35是-36而不是220,但为什么呢?
对于任意整数n, 按位求补n将会-(n + 1)。要理解这一点,您应该了解 2 的补码。
2的补码
二进制补码是对二进制数的运算。一个数的 2 补码等于该数的补码加 1。例如:
十进制 二进制 2 的补码 0 00000000 -(11111111+1) = -00000000 = -0(十进制) 1 00000001 -(11111110+1) = -11111111 = -256(十进制) 12 00001100 -(11110011+1) = -11110100 = -244(十进制) 220 11011100 -(00100011+1) = -00100100 = -36(十进制) 注意:计算 2 的补码时,溢出被忽略。
35的按位补码是220(十进制)。220的 2 的补码是-36。因此,输出是-36而不是220。
任何数字 N 的按位补码是 -(N+1)。就是这样:
N 的按位补码 = ~N(以 2 的补码形式表示) ~N 的 2' 补码= -(~(~N)+1) = -(N+1)
按位补码
#include <stdio.h>
int main() {
    printf("Output = %d\n", ~35);
    printf("Output = %d\n", ~-12);
    return 0;
}输出
输出=-36
输出 = 11C 编程中的移位运算符
C 语言编程中有两种移位运算符:
- 右移运算符
- 左移运算符。
右移运算符
右移运算符将所有位向右移动一定数量的指定位。它用 表示>>。
212 = 11010100(二进制) 212 >> 2 = 00110101 (二进制) [右移两位] 212 >> 7 = 00000001(二进制) 212 >> 8 = 00000000 212 >> 0 = 11010100(无移位)
左移运算符
左移运算符将所有位向左移动一定数量的指定位。左移运算符空出的位用0填充。左移运算符的符号是<<。
212 = 11010100(二进制) 212<<1 = 110101000 (二进制) [左移一位] 212<<0 = 11010100(移 0) 212<<4 = 110101000000(二进制)=3392(十进制)
移位运算符
#include <stdio.h>
int main() {
    int num=212, i;
    for (i = 0; i <= 2; ++i) {
        printf("Right shift by %d: %d\n", i, num >> i);
    }
    printf("\n");
    for (i = 0; i <= 2; ++i) {
        printf("Left shift by %d: %d\n", i, num << i);    
    }
    return 0;
}结果
右移 0:212
右移 1: 106
右移 2: 53
左移 0:212
左移 1:424
左移 2:848逗号运算符
逗号运算符用于将相关表达式链接在一起。例如:
int a, c = 5, d;运算符的大小
是sizeof一个一元运算符,返回数据的大小(常量、变量、数组、结构体等)。
#include <stdio.h>
int main()
{
    int a;
    float b;
    double c;
    char d;
    printf("Size of int=%lu bytes\n",sizeof(a));
    printf("Size of float=%lu bytes\n",sizeof(b));
    printf("Size of double=%lu bytes\n",sizeof(c));
    printf("Size of char=%lu byte\n",sizeof(d));
    return 0;
}结果
int 的大小 = 4 字节 浮点数的大小 = 4 字节 双精度数的大小 = 8 字节 字符大小 = 1 字节



















