C operator


Operator

ialah simbol yang memberitahu pengkompil untuk melaksanakan operasi matematik atau logik tertentu. Bahasa C mempunyai pengendali terbina dalam yang kaya dan menyediakan jenis pengendali berikut:

  • Pengendali aritmetik

  • Pengendali perhubungan

  • Pengendali logik

  • Pengendali bitwise

  • Pengendali tugasan

  • Pelbagai operator

Bab ini akan memperkenalkan pengendali aritmetik, pengendali hubungan, pengendali logik, pengendali bitwise, pengendali tugasan dan pengendali lain satu demi satu.

Pengendali aritmetik

Jadual berikut menunjukkan semua pengendali aritmetik yang disokong oleh bahasa C. Andaikan nilai pembolehubah A ialah 10 dan nilai pembolehubah B ialah 20, maka:

运算符描述实例
+把两个操作数相加A + B 将得到 30
-从第一个操作数中减去第二个操作数A - B 将得到 -10
*把两个操作数相乘A * B 将得到 200
/分子除以分母B / A 将得到 2
%取模运算符,整除后的余数B % A 将得到 0
++自增运算符,整数值增加 1A++ 将得到 11
--自减运算符,整数值减少 1A-- 将得到 9

Contoh

Lihat contoh di bawah untuk mengetahui tentang semua operator aritmetik yang tersedia dalam bahasa C:

#include <stdio.h>main(){   int a = 21;   int b = 10;   int c ;

   c = a + b;
   printf("Line 1 - c 的值是 %d\n", c );
   c = a - b;
   printf("Line 2 - c 的值是 %d\n", c );
   c = a * b;
   printf("Line 3 - c 的值是 %d\n", c );
   c = a / b;
   printf("Line 4 - c 的值是 %d\n", c );
   c = a % b;
   printf("Line 5 - c 的值是 %d\n", c );
   c = a++; 
   printf("Line 6 - c 的值是 %d\n", c );
   c = a--; 
   printf("Line 7 - c 的值是 %d\n", c );}

Apabila kod di atas disusun dan dilaksanakan, ia menghasilkan keputusan berikut:

Line 1 - c 的值是 31Line 2 - c 的值是 11Line 3 - c 的值是 210Line 4 - c 的值是 2Line 5 - c 的值是 1Line 6 - c 的值是 21Line 7 - c 的值是 22

Pengendali Perhubungan

Jadual berikut menunjukkan semua pengendali perhubungan yang disokong oleh bahasa C. Andaikan nilai pembolehubah A ialah 10 dan nilai pembolehubah B ialah 20, maka:

运算符描述实例
==检查两个操作数的值是否相等,如果相等则条件为真。(A == B) 不为真。
!=检查两个操作数的值是否相等,如果不相等则条件为真。(A != B) 为真。
>检查左操作数的值是否大于右操作数的值,如果是则条件为真。(A > B) 不为真。
<检查左操作数的值是否小于右操作数的值,如果是则条件为真。(A < B) 为真。
>=检查左操作数的值是否大于或等于右操作数的值,如果是则条件为真。(A >= B) 不为真。
<=检查左操作数的值是否小于或等于右操作数的值,如果是则条件为真。(A <= B) 为真。

Contoh

Sila lihat contoh di bawah, ketahui tentang semua pengendali hubungan yang tersedia dalam bahasa C:

#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" );   }}

Apabila kod di atas disusun dan dilaksanakan, ia akan menghasilkan keputusan berikut:

Line 1 - a 不等于 bLine 2 - a 不小于 bLine 3 - a 大于 bLine 4 - a 小于或等于 bLine 5 - b 大于或等于 b

Pengendali logik

Jadual berikut menunjukkan semua pengendali logik hubungan yang disokong oleh bahasa C. Andaikan bahawa nilai pembolehubah A ialah 1 dan nilai pembolehubah B ialah 0, maka:

运算符描述实例
&&称为逻辑与运算符。如果两个操作数都非零,则条件为真。(A && B) 为假。
||称为逻辑或运算符。如果两个操作数中有任意一个非零,则条件为真。(A || B) 为真。
!称为逻辑非运算符。用来逆转操作数的逻辑状态。如果条件为真则逻辑非运算符将使其为假。!(A && B) 为真。

Contoh

Lihat contoh di bawah untuk mengetahui tentang semua operator logik yang tersedia dalam bahasa C:

#include <stdio.h>main(){   int a = 5;   int b = 20;   int c ;   if ( a && b )   {
      printf("Line 1 - 条件为真\n" );   }   if ( a || b )   {
      printf("Line 2 - 条件为真\n" );   }   /* 改变 a 和 b 的值 */
   a = 0;
   b = 10;   if ( a && b )   {
      printf("Line 3 - 条件为真\n" );   }   else   {
      printf("Line 3 - 条件不为真\n" );   }   if ( !(a && b) )   {
      printf("Line 4 - 条件为真\n" );   }}

Apabila kod di atas disusun dan dilaksanakan, ia menghasilkan keputusan berikut:

Line 1 - 条件为真Line 2 - 条件为真Line 3 - 条件不为真Line 4 - 条件为真

Pengendali Bitwise

Pengendali Bitwise bertindak pada bit dan melaksanakan operasi sedikit demi sedikit. Jadual kebenaran untuk &, |. dan ^ kelihatan seperti ini:

pqp & qp | qp ^ q
00000
01011
11110
10011

Katakan jika A = 60, dan B = 13, kini dalam format binari, ia kelihatan seperti ini:

A = 0011 1100

B = 0000 1101

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

A&B = 0000 1100

A|B = 0011 1101

A^B = 0011 0001

~A = 1100 0011

Jadual berikut menunjukkan pengendali bitwise yang disokong oleh bahasa C. Andaikan bahawa nilai pembolehubah A ialah 60 dan nilai pembolehubah B ialah 13, maka:

运算符描述实例
&如果同时存在于两个操作数中,二进制 AND 运算符复制一位到结果中。(A & B) 将得到 12,即为 0000 1100
|如果存在于任一操作数中,二进制 OR 运算符复制一位到结果中。(A | B) 将得到 61,即为 0011 1101
^如果存在于其中一个操作数中但不同时存在于两个操作数中,二进制异或运算符复制一位到结果中。(A ^ B) 将得到 49,即为 0011 0001
~二进制补码运算符是一元运算符,具有"翻转"位效果。(~A ) 将得到 -61,即为 1100 0011,2 的补码形式,带符号的二进制数。
<<二进制左移运算符。左操作数的值向左移动右操作数指定的位数。A << 2 将得到 240,即为 1111 0000
>>二进制右移运算符。左操作数的值向右移动右操作数指定的位数。A >> 2 将得到 15,即为 0000 1111

Contoh

Lihat contoh di bawah untuk mengetahui tentang semua operator bitwise yang tersedia dalam bahasa C:

#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 - c 的值是 %d\n", c );

   c = a | b;       /* 61 = 0011 1101 */
   printf("Line 2 - c 的值是 %d\n", c );

   c = a ^ b;       /* 49 = 0011 0001 */
   printf("Line 3 - c 的值是 %d\n", c );

   c = ~a;          /*-61 = 1100 0011 */
   printf("Line 4 - c 的值是 %d\n", c );

   c = a << 2;     /* 240 = 1111 0000 */
   printf("Line 5 - c 的值是 %d\n", c );

   c = a >> 2;     /* 15 = 0000 1111 */
   printf("Line 6 - c 的值是 %d\n", c );}

Apabila kod di atas disusun dan dilaksanakan, ia menghasilkan keputusan berikut:

Line 1 - c 的值是 12Line 2 - c 的值是 61Line 3 - c 的值是 49Line 4 - c 的值是 -61Line 5 - c 的值是 240Line 6 - c 的值是 15

Operator Tugasan

Jadual berikut menyenaraikan operator tugasan yang disokong oleh bahasa C:

运算符描述实例
=简单的赋值运算符,把右边操作数的值赋给左边操作数C = A + B 将把 A + B 的值赋给 C
+=加且赋值运算符,把右边操作数加上左边操作数的结果赋值给左边操作数C += A 相当于 C = C + A
-=减且赋值运算符,把左边操作数减去右边操作数的结果赋值给左边操作数C -= A 相当于 C = C - A
*=乘且赋值运算符,把右边操作数乘以左边操作数的结果赋值给左边操作数C *= A 相当于 C = C * A
/=除且赋值运算符,把左边操作数除以右边操作数的结果赋值给左边操作数C /= A 相当于 C = C / A
%=求模且赋值运算符,求两个操作数的模赋值给左边操作数C %= A 相当于 C = C % A
<<=左移且赋值运算符C <<= 2 等同于  C = C << 2
>>=右移且赋值运算符C >>= 2 等同于  C = C >> 2
&=按位与且赋值运算符C &= 2 等同于  C = C & 2
^=按位异或且赋值运算符C ^= 2 等同于  C = C ^ 2
|=按位或且赋值运算符C |= 2 等同于  C = C | 2

Contoh

Sila lihat contoh di bawah , ketahui tentang semua operator tugasan tersedia dalam bahasa C:

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

Apabila kod di atas disusun dan dilaksanakan, ia akan menghasilkan keputusan berikut:

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

Pelbagai operator ↦ saiz & ternary

Jadual berikut menyenaraikan beberapa operator penting lain yang disokong oleh bahasa C, termasuk saiz dan :?

运算符描述实例
sizeof()返回变量的大小。sizeof(a) 将返回 4,其中 a 是整数。
&返回变量的地址。&a; 将给出变量的实际地址。
*指向一个变量。*a; 将指向一个变量。
? :条件表达式如果条件为真 ? 则值为 X : 否则值为 Y

Contoh

Lihat contoh di bawah untuk mengetahui tentang semua operator pelbagai yang tersedia dalam bahasa C:

#include <stdio.h>main(){   int a = 4;   short b;   double c;   int* ptr;   /* sizeof 运算符实例 */
   printf("Line 1 - 变量 a 的大小 = %d\n", sizeof(a) );
   printf("Line 2 - 变量 b 的大小 = %d\n", sizeof(b) );
   printf("Line 3 - 变量 c 的大小 = %d\n", sizeof(c) );   /* & 和 * 运算符实例 */
   ptr = &a;/* 'ptr' 现在包含 'a' 的地址 */
   printf("a 的值是 %d\n", a);
   printf("*ptr 是 %d\n", *ptr);   /* 三元运算符实例 */
   a = 10;
   b = (a == 1) ? 20: 30;
   printf( "b 的值是 %d\n", b );

   b = (a == 10) ? 20: 30;
   printf( "b 的值是 %d\n", b );}

Apabila kod di atas disusun dan dilaksanakan, ia menghasilkan keputusan berikut:

a 的值是 4*ptr 是 4b 的值是 30b 的值是 20

Keutamaan pengendali dalam C

Keutamaan pengendali menentukan gabungan istilah dalam ungkapan. Ini mempengaruhi cara ungkapan dinilai. Sesetengah pengendali mempunyai keutamaan yang lebih tinggi daripada yang lain, contohnya, pengendali pendaraban dan pembahagian mempunyai keutamaan yang lebih tinggi daripada pengendali tambah dan tolak.

Contohnya x = 7 + 3 * 2, di sini, x diberikan nilai 13 dan bukannya 20, kerana operator * mempunyai keutamaan yang lebih tinggi daripada +, jadi pendaraban 3*2 dikira dahulu, dan kemudian Tambah 7 lagi.

Jadual berikut menyenaraikan setiap operator mengikut urutan keutamaan operator dari tinggi ke rendah Operator dengan keutamaan lebih tinggi muncul di bahagian atas jadual, dan operator dengan keutamaan lebih rendah muncul di bahagian bawah jadual. Dalam ungkapan, pengendali dengan keutamaan yang lebih tinggi dinilai terlebih dahulu.

类别 运算符 结合性 
后缀 () [] -> .  ++   - -  从左到右 
一元 +  -   !  ~  ++  - -   (type)*  &  sizeof 从右到左 
乘除 *  /  % 从左到右 
加减 +  - 从左到右 
移位 << >> 从左到右 
关系 < <=  > >= 从左到右 
相等 ==  != 从左到右 
位与 AND 从左到右 
位异或 XOR 从左到右 
位或 OR 从左到右 
逻辑与 AND && 从左到右 
逻辑或 OR || 从左到右 
条件 ?: 从右到左 
赋值 =  +=  -=  *=  /=  %=>>=  <<=  &=  ^=   |= 从右到左 
逗号 从左到右 

Contoh

Sila lihat contoh berikut untuk memahami keutamaan pengendali dalam bahasa C:

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

Apabila kod di atas disusun dan dilaksanakan, ia akan menghasilkan keputusan berikut:

(a + b) * c / d 的值是 90((a + b) * c) / d 的值是 90(a + b) * (c / d) 的值是 90a + (b * c) / d 的值是 50