C语言运算符是用于执行特定操作的符号,它们可以应用于一个或多个操作数。C语言中的运算符可以分为几个不同的类别:算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符和其他运算符。
算术运算符
算术运算符用于执行数学运算,如加法、减法、乘法等。
- +:加法运算符,用于计算两个操作数的和。
- -:减法运算符,用于计算两个操作数的差。
- *:乘法运算符,用于计算两个操作数的乘积。
- /:除法运算符,用于计算两个操作数的商。
- %:模运算符,用于计算两个操作数相除的余数(只适用于整数)。
int a = 10, b = 3;
int sum = a + b; // sum = 13
int difference = a - b; // difference = 7
int product = a * b; // product = 30
int quotient = a / b; // quotient = 3
int remainder = a % b; // remainder = 1
关系运算符
关系运算符用于比较两个操作数的值。
- ==:等于运算符,检查两个操作数是否相等。
- !=:不等于运算符,检查两个操作数是否不相等。
- >:大于运算符,检查左操作数是否大于右操作数。
- <:小于运算符,检查左操作数是否小于右操作数。
- >=:大于等于运算符,检查左操作数是否大于或等于右操作数。
- <=:小于等于运算符,检查左操作数是否小于或等于右操作数。
int x = 5, y = 10;
_Bool result1 = (x == y); // result1 = 0 (false)
_Bool result2 = (x != y); // result2 = 1 (true)
_Bool result3 = (x > y); // result3 = 0 (false)
_Bool result4 = (x < y); // result4 = 1 (true)
_Bool result5 = (x >= 5); // result5 = 1 (true)
_Bool result6 = (y <= 10); // result6 = 1 (true)
逻辑运算符
逻辑运算符用于组合多个条件。
- &&:逻辑与运算符,当所有操作数都为真时返回真。
- ||:逻辑或运算符,当任一操作数为真时返回真。
- !:逻辑非运算符,用于反转操作数的逻辑状态。
_Bool a = 1, b = 0;
_Bool result1 = (a && b); // result1 = 0 (false)
_Bool result2 = (a || b); // result2 = 1 (true)
_Bool result3 = !a; // result3 = 0 (false)
位运算符
位运算符用于操作操作数的二进制位。
- &:按位与运算符,对两个操作数逐位进行与操作。
- |:按位或运算符,对两个操作数逐位进行或操作。
- ^:按位异或运算符,对两个操作数逐位进行异或操作。
- ~:按位取反运算符,对操作数逐位取反。
- <<:左移运算符,将操作数的所有位向左移指定的位数。
- >>:右移运算符,将操作数的所有位向右移指定的位数。
unsigned int a = 12; // 二进制: 1100
unsigned int b = 5; // 二进制: 0101
unsigned int result1 = a & b; // result1 = 4 (二进制: 0100)
unsigned int result2 = a | b; // result2 = 13 (二进制: 1101)
unsigned int result3 = a ^ b; // result3 = 9 (二进制: 1001)
unsigned int result4 = ~a; // result4 = 4294967283 (取决于系统,这里是32位)
unsigned int result5 = a << 2; // result5 = 48 (二进制: 110000)
unsigned int result6 = a >> 2; // result6 = 3 (二进制: 0011)
赋值运算符
赋值运算符用于将值赋给变量。
- =:简单的赋值运算符,将右侧的值赋给左侧的变量。
- +=:加法赋值运算符,将右侧的值加到左侧的变量上,并将结果赋给左侧的变量。
- -=:减法赋值运算符,从左侧的变量中减去右侧的值,并将结果赋给左侧的变量。
- *=:乘法赋值运算符,将右侧的值乘以左侧的变量,并将结果赋给左侧的变量。
- /=:除法赋值运算符,将左侧的变量除以右侧的值,并将结果赋给左侧的变量。
- %=:模赋值运算符,将左侧的变量除以右侧的值,并将余数赋给左侧的变量。
- <<=:左移赋值运算符,将左侧的变量向左移动右侧指定的位数,并将结果赋给左侧的变量。
- >>=:右移赋值运算符,将左侧的变量向右移动右侧指定的位数,并将结果赋给左侧的变量。
- &=:按位与赋值运算符,对左侧的变量和右侧的值进行按位与操作,并将结果赋给左侧的变量。
- |=:按位或赋值运算符,对左侧的变量和右侧的值进行按位或操作,并将结果赋给左侧的变量。
- ^=:按位异或赋值运算符,对左侧的变量和右侧的值进行按位异或操作,并将结果赋给左侧的变量。
int a = 10;
a += 5; // a = 15
a -= 3; // a = 12
a *= 2; // a = 24
a /= 4; // a = 6
a %= 5; // a = 1
a <<= 1; // a = 2
a >>= 1; // a = 1
a &= 3; // a = 1
a |= 2; // a = 3
a ^= 1; // a = 2
其他运算符
- sizeof:返回变量或类型的大小(以字节为单位)。
- &:返回变量的内存地址(作为指针运算符)。
- *:返回指针指向的值(作为解引用运算符)。
- ->:用于访问结构体或联合的成员。
- ?::条件运算符,用于基于条件表达式选择两个值之一。
int a = 5;
printf("Size of int: %zu\n", sizeof(a)); // 输出变量a的大小
printf("Address of a: %p\n", (void*)&a); // 输出变量a的地址
int *ptr = &a;