C語言中的單元運算子



雖然C語言中的大多數運算子本質上都是二元的,但也有一些單元運算子。如果一個運算子只需要一個運算元,則稱其為單元運算子,不像二元運算子需要兩個運算元。

C語言中的一些運算子在使用中既是二元的,也是單元的。C語言中單元運算子的示例包括++--!等。

C語言中的自增運算子

自增運算子 (++) 將其運算元變數的值加 1,並將其賦值回該變數。

語句a++等效於編寫“a = a + 1”。“++”運算子可以出現在運算元之前或之後,並且它將具有相同的效果。因此,a++等效於++a

但是,當自增運算子與表示式中的其他運算子一起出現時,其效果並不相同。“字首++”的優先順序高於“字尾++”。因此,“b = a++;”與“b = ++a;”不同。

在前面一種情況下,在遞增之前將“a”賦值給“b”;而在後面一種情況下,遞增是在賦值之前執行的。

C語言中的自減運算子

自減運算子 (--) 從其運算元變數的值中減去 1,並將其賦值回該變數。

語句“a--;”等效於編寫“a = a - 1;”。

“--”運算子可以出現在運算元之前或之後,並且在這兩種情況下,它都將具有相同的效果。因此,“a--”等效於“--a”。

但是,當自減運算子與表示式中的其他運算子一起出現時,其效果並不相同。“字首--”的優先順序高於“字尾--”。因此,“b = a--”與“b = --a”不同。

在前面一種情況下,在遞減之前將“a”賦值給“b”;而在後面一種情況下,遞減是在賦值之前執行的。

C語言中的單目“+”運算子

“+”和“–”運算子眾所周知是二元加法和減法運算子。但是,它們也可以以單元方式使用。當用作單元時,它們被加到運算元變數之前。

當為任何數值變數賦值正值時,“+”運算子隱式存在。語句“int x = 5;”與“int x = +5;”相同。相同邏輯也適用於浮點型和字元型變數。

示例

請檢視以下示例 -

#include <stdio.h>

int main(){

   char x = 'A';
   char y = +x;

   float a = 1.55;
   float b = +a;

   printf ("x: %c y: %c\n", x,y);
   printf ("a: %f y: %f\n", a,b);

   return 0;
}

輸出

執行此程式碼時,將產生以下輸出 -

x: A y: A
a: 1.550000 y: 1.550000

C語言中的單目“−”運算子

通常表示減法運算子的“”符號在C語言中也充當單目否定運算子。以下程式碼展示瞭如何在C語言中使用單目否定運算子。

示例

在此程式碼中,單目否定運算子返回“x”的負值,並將相同的負值賦值給另一個變數“y”。

#include <stdio.h>

int main(){

   int x = 5;
   int y = -x;

   printf("x: %d y: %d\n", x, y);

   return 0;
}

輸出

執行程式碼並檢查其輸出 -

x: 5 y: -5

C語言中的取地址運算子(&)

我們在C語言中使用&符號作為二元AND運算子。但是,我們也以單元方式使用相同的&符號作為“取地址”運算子。

示例

&運算子返回其變數運算元的記憶體地址。請檢視以下示例 -

#include <stdio.h>

int main(){

   char x = 'A';
   printf ("Address of x: %d\n", &x);

   return 0;
}

輸出

執行程式碼並檢查其輸出 -

Address of x: 6422047

注意:C編譯器在宣告變數時分配一個隨機記憶體地址。因此,每次列印地址時,結果可能會有所不同。

格式說明符%p用於獲取記憶體地址的十六進位制表示形式。

char x = 'A';
printf ("Address of x: %p\n", &x);

這將以十六進位制格式列印“x”的地址 -

Address of x: 000000000061FE1F

變數的地址通常儲存在“指標變數”中。指標變數用“*”字首宣告。在下面的程式碼片段中,“x”是普通的整型變數,而“y”是指標變數。

int x = 10;
int *y = &x;

C語言中的解引用運算子(*)

我們通常使用“*”符號作為乘法運算子。但是,它在C語言中也用作“解引用運算子”。

當您想儲存變數的記憶體地址時,應在其字首中使用星號(*)宣告該變數。

int x = 10;
int *y = &x;

這裡變數“y”儲存“x”的地址,因此“y”充當“x”的指標。要使用其指標訪問“x”的值,請使用解引用運算子(*)。

示例1

請檢視以下示例 -

#include <stdio.h>

int main(){

   int x = 10;
   int *y = &x;

   printf ("x: %d Address of x: %d\n", x, &x);
   printf("Value at x with Dereference: %d", *y);

   return 0;
}

輸出

執行程式碼並檢查其輸出 -

x: 10 Address of x: 6422036
Value at x with Dereference: 10

示例2

您還可以使用解引用指標為原始變數賦值 -

#include <stdio.h>

int main(){

   int x = 10;
   
   int *y = &x;

   printf("x: %d Address of x %d\n", x, &x);
   
   *y = 20;
   
   printf("x: %d with Dereference: %d", x, *y);

   return 0;
}

輸出

執行程式碼並檢查其輸出 -

x: 10 Address of x: 6422036
x: 20 with dereference: 20

C語言中的邏輯非運算子(!)

C語言中的邏輯非運算子(!)否定布林運算元的值。真變為假,假變為真。邏輯非運算子(!)是單元運算子。

示例1

以下示例顯示瞭如何在C語言中使用邏輯運算子 -

#include <stdio.h>

int main(){

   int a = 0;
   int b = 20;	
	
   if (!(a && b)){
      printf("Line 1 - Condition is true\n" );
   }
   
   return 0;	
}

輸出

Line 1 - Condition is true

示例2

以下C程式碼在while迴圈中使用NOT運算子 -

#include <stdio.h>

int main(){

   int i = 0;

   while (!(i > 5)){
      printf("i = %d\n", i);
      i++;
   }
   
   return 0;
}

輸出

在此程式碼中,while迴圈繼續迭代,直到表示式“!(i > 5)”變為False,這將發生在“i”的值大於5時。

i = 0
i = 1
i = 2
i = 3
i = 4
i = 5

C語言中的按位取反運算子(~)

C語言中的按位取反運算子(~)是單元運算子,只需要一個運算元。它具有“翻轉”位的效果,這意味著任何數字的二進位制表示形式中,1將被0替換,反之亦然。

a ~a
0 1
1 0

假設int變數“a”的值為60(在二進位制中相當於0011 1100),則根據其對應位的按位右移,~a操作將得到2的補碼形式的-61。

~ 0011 1100 = 1100 0011

二進位制數“1100 0011”對應於十進制中的-61。

示例

請檢視此示例程式碼 -

#include <stdio.h>

int main(){

   int a = 60;	/* 60 = 0011 1100 */
   int c = 0;

   c = ~a;      /* -61 = 1100 0011 */

   printf("Value of c is %d \n", c);

   return 0;
}

輸出

執行此程式碼時,將產生以下輸出 -

Value of c is -61
廣告