# C - 运算符

C语言包含丰富的内置运算符，并提供以下类型的运算符-

• 算术运算符
• 关系运算符
• 逻辑运算符
• 按位运算符
• 赋值运算符
• Misc运算符

## 算术运算符

+相加A + B=30
-相减A - B=-10
*相乘A * B=200
/相除B/A=2
%取模B % A=0
++递增A++=11
--递减A--=9

```#include <stdio.h>

main() {

int a = 21;
int b = 10;
int c ;

c = a + b;
printf("Line 1 - Value of c is %d\n", c );

c = a - b;
printf("Line 2 - Value of c is %d\n", c );

c = a * b;
printf("Line 3 - Value of c is %d\n", c );

c = a / b;
printf("Line 4 - Value of c is %d\n", c );

c = a % b;
printf("Line 5 - Value of c is %d\n", c );

c = a++;
printf("Line 6 - Value of c is %d\n", c );

c = a--;
printf("Line 7 - Value of c is %d\n", c );
}```

```Line 1 - Value of c is 31
Line 2 - Value of c is 11
Line 3 - Value of c is 210
Line 4 - Value of c is 2
Line 5 - Value of c is 1
Line 6 - Value of c is 21
Line 7 - Value of c is 22```

## 关系运算符

==判断是否相等(A == B) is not true.
!=判断是否不相等(A != B) is true.
>大于(A > B) is not true.
<小于(A < B) is true.
>=大于或等于(A >= B) is not true.
<=小于或等于(A <= B) is true.

```#include <stdio.h>

main() {

int a = 21;
int b = 10;
int c ;

if( a == b ) {
printf("Line 1 - a is equal to b\n" );
} else {
printf("Line 1 - a is not equal to b\n" );
}

if ( a < b ) {
printf("Line 2 - a is less than b\n" );
} else {
printf("Line 2 - a is not less than b\n" );
}

if ( a > b ) {
printf("Line 3 - a is greater than b\n" );
} else {
printf("Line 3 - a is not greater than b\n" );
}

/* 让我们改变 a 和 b 的值 */
a = 5;
b = 20;

if ( a <= b ) {
printf("Line 4 - a is either less than or equal to  b\n" );
}

if ( b >= a ) {
printf("Line 5 - b is either greater than  or equal to b\n" );
}
}```

```Line 1 - a is not equal to b
Line 2 - a is not less than b
Line 3 - a is greater than b
Line 4 - a is either less than or equal to  b
Line 5 - b is either greater than  or equal to b```

## 逻辑运算符

&&逻辑AND,两边都为true,则返回true,否则false(A && B) is false.
||逻辑OR,两边只要有一边是true,则返回true(A || B) is true.
!逻辑否,如果A为true,!A否为false!(A && B) is true.

```#include <stdio.h>

main() {

int a = 5;
int b = 20;
int c ;

if ( a && b ) {
printf("Line 1 - Condition is true\n" );
}

if ( a || b ) {
printf("Line 2 - Condition is true\n" );
}

/* 让我们改变 a 和 b 的值 */
a = 0;
b = 10;

if ( a && b ) {
printf("Line 3 - Condition is true\n" );
} else {
printf("Line 3 - Condition is not true\n" );
}

if ( !(a && b) ) {
printf("Line 4 - Condition is true\n" );
}

}```

```Line 1 - Condition is true
Line 2 - Condition is true
Line 3 - Condition is not true
Line 4 - Condition is true```

## 按位运算符

pqp & qp | qp ^ q
00000
01011
11110
10011

```A=0011 1100

B=0000 1101

-----------------

A&B=0000 1100

A | B=0011 1101

A ^ B=0011 0001

~A=1100 0011```

&按位AND运算(A & B)=12, i.e., 0000 1100
|按位OR运算(A | B)=61, i.e., 0011 1101
^按位异或运算(A ^ B)=49, i.e., 0011 0001
~按位非运算(~A )=~(60), i.e,. -0111101
<<二进制左移运算A << 2=240 i.e., 1111 0000
>>二进制右移运算A >> 2=15 i.e., 0000 1111

```#include <stdio.h>

main() {

unsigned int a = 60;	/* 60=0011 1100 */
unsigned int b = 13;	/* 13=0000 1101 */
int c = 0;

c = a & b;       /* 12=0000 1100 */
printf("Line 1 - Value of c is %d\n", c );

c = a | b;       /* 61=0011 1101 */
printf("Line 2 - Value of c is %d\n", c );

c = a ^ b;       /* 49=0011 0001 */
printf("Line 3 - Value of c is %d\n", c );

c = ~a;          /*-61=1100 0011 */
printf("Line 4 - Value of c is %d\n", c );

c = a << 2;     /* 240=1111 0000 */
printf("Line 5 - Value of c is %d\n", c );

c = a >> 2;     /* 15=0000 1111 */
printf("Line 6 - Value of c is %d\n", c );
}```

```Line 1 - Value of c is 12
Line 2 - Value of c is 61
Line 3 - Value of c is 49
Line 4 - Value of c is -61
Line 5 - Value of c is 240
Line 6 - Value of c is 15```

## 赋值运算符

=赋值运算符C=A + B will assign the value of A + B to C
+=先加再赋值。C += A is equivalent to C=C + A
-=先减后赋值C -= A is equivalent to C=C - A
*=先乘后赋值C *= A is equivalent to C=C * A
/=先除后赋值C /= A is equivalent to C=C/A
%=取模后赋值C %= A is equivalent to C=C % A
<<=左移后赋值C <<= 2 is same as C=C << 2
>>=右移后赋值C >>= 2 is same as C=C >> 2
&=按位与赋值运算符C &= 2 is same as C=C & 2
^=按位非赋值运算符C ^= 2 is same as C=C ^ 2
|=按位或(OR)和赋值运算符。C |= 2 is same as C=C | 2

```#include <stdio.h>

main() {

int a = 21;
int c ;

c =  a;
printf("Line 1 -= Operator Example, Value of c=%d\n", c );

c +=  a;
printf("Line 2 - += Operator Example, Value of c=%d\n", c );

c -=  a;
printf("Line 3 - -= Operator Example, Value of c=%d\n", c );

c *=  a;
printf("Line 4 - *= Operator Example, Value of c=%d\n", c );

c /=  a;
printf("Line 5 - /= Operator Example, Value of c=%d\n", c );

c  = 200;
c %=  a;
printf("Line 6 - %= Operator Example, Value of c=%d\n", c );

c <<=  2;
printf("Line 7 - <<= Operator Example, Value of c=%d\n", c );

c >>=  2;
printf("Line 8 - >>= Operator Example, Value of c=%d\n", c );

c &=  2;
printf("Line 9 - &= Operator Example, Value of c=%d\n", c );

c ^=  2;
printf("Line 10 - ^= Operator Example, Value of c=%d\n", c );

c |=  2;
printf("Line 11 - |= Operator Example, Value of c=%d\n", c );
}```

```Line 1 -= Operator Example, Value of c=21
Line 2 - += Operator Example, Value of c=42
Line 3 - -= Operator Example, Value of c=21
Line 4 - *= Operator Example, Value of c=441
Line 5 - /= Operator Example, Value of c=21
Line 6 - %= Operator Example, Value of c=11
Line 7 - <<= Operator Example, Value of c=44
Line 8 - >>= Operator Example, Value of c=11
Line 9 - &= Operator Example, Value of c=2
Line 10 - ^= Operator Example, Value of c=0
Line 11 - |= Operator Example, Value of c=2```

## sizeof和三元运算符

Operator描述Example
sizeof()返回变量的大小。sizeof(a),其中a为整数,将返回4。
&返回变量的地址。&a; 返回变量的实际地址。
*指向变量的指针。*a;
? :条件表达式。If Condition is true ? then value X : otherwise value Y

```#include <stdio.h>

main() {

int a = 4;
short b;
double c;
int* ptr;

/* sizeof 运算符的示例 */
printf("Line 1 - Size of variable a=%d\n", sizeof(a) );
printf("Line 2 - Size of variable b=%d\n", sizeof(b) );
printf("Line 3 - Size of variable c= %d\n", sizeof(c) );

/* & 和 * 运算符的示例 */
ptr = &a;	/* “ptr”现在包含“a”的地址 */
printf("value of a is  %d\n", a);
printf("*ptr is %d.\n", *ptr);

/* 三元运算符的例子 */
a = 10;
b = (a == 1) ? 20: 30;
printf( "Value of b is %d\n", b );

b = (a == 10) ? 20: 30;
printf( "Value of b is %d\n", b );
}```

```Line 1 - Size of variable a=4
Line 2 - Size of variable b=2
Line 3 - Size of variable c= 8
value of a is  4
*ptr is 4.
Value of b is 30
Value of b is 20```

### 相关文章

Gnuplot 和 C - 绘制不同的符号/ colored颜色