C operators
An operator is a symbol that tells the compiler to perform a specific mathematical or logical operation. C language has rich built-in operators and provides the following types of operators:
Arithmetic operators
Relational operators
Logical operators
Bitwise operators
Assignment operators
Miscellaneous operators
This chapter will introduce arithmetic operators, relational operators, logical operators, bitwise operators, assignment operators and other operators one by one.
Arithmetic operators
The following table shows all the arithmetic operators supported by C language. Assume that the value of variable A is 10 and the value of variable B is 20, then:
Description | Example | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Add the two operands | A + B will get 30 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Subtracting the second operand from the first operand | A - B will give -10 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Multiply the two operands | A * B will get 200 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
numerator Dividing by the denominator | B / A will get 2 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
modulo operator, the remainder after integer division | B % A will get 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
auto-increment operator, the integer value is increased by 1 | A++ will get 11 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Decrement operator, decrement the integer value by 1 | A-- will get 9 |
Description | Example | |
---|---|---|
Checks whether the values of the two operands are equal. If they are equal, the condition is true. | (A == B) is not true. | |
Checks whether the values of the two operands are equal. If they are not equal, the condition is true. | (A != B) is true. | |
Checks whether the value of the left operand is greater than the value of the right operand, if so, the condition is true. | (A > B) is not true. | |
Checks whether the value of the left operand is less than the value of the right operand, if so the condition is true. | (A < B) is true. | |
Checks whether the value of the left operand is greater than or equal to the value of the right operand, if so the condition is true. | (A >= B) is not true. | |
Checks whether the value of the left operand is less than or equal to the value of the right operand, if so the condition is true. | (A <= B) is true. |
#include <stdio.h>main(){ int a = 21; int b = 10; int c ; if( a == b ) { printf("Line 1 - a 等于 b\n" ); } else { printf("Line 1 - a 不等于 b\n" ); } if ( a < b ) { printf("Line 2 - a 小于 b\n" ); } else { printf("Line 2 - a 不小于 b\n" ); } if ( a > b ) { printf("Line 3 - a 大于 b\n" ); } else { printf("Line 3 - a 不大于 b\n" ); } /* 改变 a 和 b 的值 */ a = 5; b = 20; if ( a <= b ) { printf("Line 4 - a 小于或等于 b\n" ); } if ( b >= a ) { printf("Line 5 - b 大于或等于 b\n" ); }}When the above code When compiled and executed, it produces the following results:
Line 1 - a 不等于 bLine 2 - a 不小于 bLine 3 - a 大于 bLine 4 - a 小于或等于 bLine 5 - b 大于或等于 bLogical operatorsThe following table shows all the relational logical operators supported by the C language. Assume that the value of variable
A is 1 and the value of variable B is 0, then:
Description | Instance | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
is called the logical AND operator. The condition is true if both operands are non-zero. | (A && B) is false. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
is called the logical OR operator. The condition is true if either of the two operands is non-zero. | (A || B) is true. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
is called the logical NOT operator. Used to reverse the logical state of the operand. The logical NOT operator will make the condition false if it is true. | !(A && B) is true. |
p | q | p & q | p | q | p ^ q |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 1 | 1 |
A is 60 and the value of variable B is 13, then:
Description | Example | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
The binary AND operator copies one bit to the result if both operands are present at the same time. | (A & B) will get 12, which is 0000 1100 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
If present in any operand, binary OR operation character is copied into the result. | (A | B) will get 61, which is 0011 1101 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if present in one of the operands but not both The binary XOR operator copies one of the two operands into the result. | (A ^ B) will get 49, which is 0011 0001 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
The two's complement operator is a unary operator with " Flip" bit effect. | (~A ) will get -61, which is 1100 0011, 2's complement, signed binary number. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Binary left shift operator. The value of the left operand is shifted left by the number of bits specified by the right operand. | A << 2 will get 240, which is 1111 0000 | ##>> | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
A >> 2 will get 15, which is 0000 1111 |
Operator | Description | Example |
---|---|---|
= | Simple assignment operator, assigns the value of the right operand to the left operand | C = A + B will assign the value of A + B to C |
+= | addition and assignment operator, adding the right operand to the left operation The result of the number is assigned to the left operand | C += A, which is equivalent to C = C + A |
-= | subtraction and assignment operator, Assign the result of subtracting the right operand from the left operand to the left operand | C -= A which is equivalent to C = C - A |
Multiplication and assignment operator, assigns the result of multiplying the right operand by the left operand to the left operand | C *= A is equivalent to C = C * A | |
The division and assignment operator assigns the result of dividing the left operand by the right operand to the left operand | C /= A is equivalent to C = C / A | |
Modulo and assignment operator, find the modulus of two operands and assign the value to the left operand | C %= A is equivalent to C = C % A | |
left shift and assignment operator | C <<= 2 is equivalent to C = C << 2 | |
Right shift and assignment operator | C >>= 2 is equivalent to C = C >> 2 | |
bitwise AND and assignment operator | C &= 2 is equivalent to C = C & 2 | |
Bitwise XOR and assignment operator | C ^= 2 is equivalent to C = C ^ 2 | |
Bitwise OR and assignment operator | C |= 2 is equivalent to C = C | 2 |
Please look at the following example to learn about all the assignment operators available in C language:
#include <stdio.h>main(){ int a = 21; int c ; c = a; printf("Line 1 - = 运算符实例,c 的值 = %d\n", c ); c += a; printf("Line 2 - += 运算符实例,c 的值 = %d\n", c ); c -= a; printf("Line 3 - -= 运算符实例,c 的值 = %d\n", c ); c *= a; printf("Line 4 - *= 运算符实例,c 的值 = %d\n", c ); c /= a; printf("Line 5 - /= 运算符实例,c 的值 = %d\n", c ); c = 200; c %= a; printf("Line 6 - %= 运算符实例,c 的值 = %d\n", c ); c <<= 2; printf("Line 7 - <<= 运算符实例,c 的值 = %d\n", c ); c >>= 2; printf("Line 8 - >>= 运算符实例,c 的值 = %d\n", c ); c &= 2; printf("Line 9 - &= 运算符实例,c 的值 = %d\n", c ); c ^= 2; printf("Line 10 - ^= 运算符实例,c 的值 = %d\n", c ); c |= 2; printf("Line 11 - |= 运算符实例,c 的值 = %d\n", c );}
When the above code is compiled and executed, it will produce the following Result:
Line 1 - = 运算符实例,c 的值 = 21Line 2 - += 运算符实例,c 的值 = 42Line 3 - -= 运算符实例,c 的值 = 21Line 4 - *= 运算符实例,c 的值 = 441Line 5 - /= 运算符实例,c 的值 = 21Line 6 - %= 运算符实例,c 的值 = 11Line 7 - <<= 运算符实例,c 的值 = 44Line 8 - >>= 运算符实例,c 的值 = 11Line 9 - &= 运算符实例,c 的值 = 2Line 10 - ^= 运算符实例,c 的值 = 0Line 11 - |= 运算符实例,c 的值 = 2
Miscellaneous operators ↦ sizeof & ternary
The following table lists some other important operators supported by the C language, including
sizeofand ?:.
Description | Instance | |
---|---|---|
Return the size of the variable. | sizeof(a) will return 4, where a is an integer. | |
Returns the address of the variable. | &a; will give the actual address of the variable. | |
points to a variable. | *a; will point to a variable. | |
Conditional expression | If the condition is true? then the value is X: otherwise the value is Y |
Category | Operator | Associativity |
---|---|---|
Suffix | () [] -> . ++ - - | From left to right |
One yuan | + - ! ~ ++ - - (type)* & sizeof | From right to left |
Multiplication and division | * / % | From left to right |
Addition and subtraction | + - | From left to right |
Shift | << >> | From left to right |
Relationship | < <= > >= | From left to right |
Equal | == != | From left to right |
Bit AND AND | & | From left to right |
Bit XOR XOR | ^ | Left to right |
bit OR | | | Left to right |
Logic AND | && | from left to right |
logical OR | || | from left To the right |
Condition | ?: | From right to left |
Assignment | = += -= *= /= %=>>= <<= &= ^= |= | From right to left |
comma | , | From left to right |
Example
Please look at the following example to understand C language Priority of operators in:
#include <stdio.h>main(){ int a = 20; int b = 10; int c = 15; int d = 5; int e; e = (a + b) * c / d; // ( 30 * 15 ) / 5 printf("(a + b) * c / d 的值是 %d\n", e ); e = ((a + b) * c) / d; // (30 * 15 ) / 5 printf("((a + b) * c) / d 的值是 %d\n" , e ); e = (a + b) * (c / d); // (30) * (15/5) printf("(a + b) * (c / d) 的值是 %d\n", e ); e = a + (b * c) / d; // 20 + (150/5) printf("a + (b * c) / d 的值是 %d\n" , e ); return 0;}
When the above code is compiled and executed, it produces the following results:
(a + b) * c / d 的值是 90((a + b) * c) / d 的值是 90(a + b) * (c / d) 的值是 90a + (b * c) / d 的值是 50