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”;而在后面一种情况下,递减是在赋值之前执行的。

Explore our latest online courses and learn new skills at your own pace. Enroll and become a certified expert to boost your career.

C语言中的单目“+”运算符

“+”和“–”运算符众所周知是二元加法和减法运算符。但是,它们也可以以单元方式使用。当用作单元时,它们被加到操作数变量之前。

当为任何数值变量赋值正值时,“+”运算符隐式存在。语句“int x = 5;”与“int x = +5;”相同。相同逻辑也适用于浮点型和字符型变量。

示例

请查看以下示例 -

Open Compiler
#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”。

Open Compiler
#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运算符。但是,我们也以单元方式使用相同的&符号作为“取地址”运算符。

示例

&运算符返回其变量操作数的内存地址。请查看以下示例 -

Open Compiler
#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

请查看以下示例 -

Open Compiler
#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

您还可以使用解引用指针为原始变量赋值 -

Open Compiler
#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语言中使用逻辑运算符 -

Open Compiler
#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运算符 -

Open Compiler
#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。

示例

请查看此示例代码 -

Open Compiler
#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
广告