C语言34种运算符的用法解析

编程入门 行业动态 更新时间:2024-10-26 12:31:37

C语言34种<a href=https://www.elefans.com/category/jswz/34/1771114.html style=运算符的用法解析"/>

C语言34种运算符的用法解析

运算符优先级

优先级

运算符

名称或含义

使用形式

结合方向

说明

1

[]

数组下标

数组名[常量表达式]

左到右

()

圆括号

(表达式)
函数名(形参表)

.

成员选择(对象)

对象.成员名

->

成员选择(指针)

对象指针->成员名

2

-

负号运算符

-表达式

右到左

单目运算符

(类型)

强制类型转换

(数据类型)表达式

++

自增运算符

++变量名
变量名++

单目运算符

--

自减运算符

--变量名
变量名--

单目运算符

*

取值运算符

*指针变量

单目运算符

&

取地址运算符

&变量名

单目运算符

!

逻辑非运算符

!表达式

单目运算符

~

按位取反运算符

~表达式

单目运算符

sizeof

长度运算符

sizeof(表达式)

3

/

表达式 / 表达式

左到右

双目运算符

*

表达式*表达式

双目运算符

%

余数(取模)

整型表达式%整型表达式

双目运算符

4

+

表达式+表达式

左到右

双目运算符

-

表达式-表达式

双目运算符

5

<<

左移

变量<<表达式

左到右

双目运算符

>>

右移

变量>>表达式

双目运算符

6

>

大于

表达式>表达式

左到右

双目运算符

>=

大于等于

表达式>=表达式

双目运算符

<

小于

表达式<表达式

双目运算符

<=

小于等于

表达式<=表达式

双目运算符

7

==

等于

表达式==表达式

左到右

双目运算符

!=

不等于

表达式!= 表达式

双目运算符

8

&

按位与

表达式&表达式

左到右

双目运算符

9

^

按位异或

表达式^表达式

左到右

双目运算符

10

|

按位或

表达式|表达式

左到右

双目运算符

11

&&

逻辑与

表达式&&表达式

左到右

双目运算符

12

||

逻辑或

表达式||表达式

左到右

双目运算符

13

?:

条件运算符

表达式1? 表达式2: 表达式3

右到左

三目运算符

14

=

赋值运算符

变量=表达式

右到左

/=

除后赋值

变量/=表达式

*=

乘后赋值

变量*=表达式

%=

取模后赋值

变量%=表达式

+=

加后赋值

变量+=表达式

-=

减后赋值

变量-=表达式

<<=

左移后赋值

变量<<=表达式

>>=

右移后赋值

变量>>=表达式

&=

按位与后赋值

变量&=表达式

^=

按位异或后赋值

变量^=表达式

|=

按位或后赋值

变量|=表达式

15

,

逗号运算符

表达式,表达式,…

左到右






C 算术运算符

操作员运算符的含义
+加法
-减法
*乘法
/分配
%除法后的余数(模除)
// 算数运算符的使用
#include <stdio.h>
int main()
{int a = 9,b = 4, c;c = a+b;printf("a+b = %d \n",c);c = a-b;printf("a-b = %d \n",c);c = a*b;printf("a*b = %d \n",c);c = a/b;printf("a/b = %d \n",c);c = a%b;printf("a除以b的余数为 b= %d \n",c);return 0;
}

 

C 自增和自减运算符

C 编程有两个运算符递增++和递减,--用于将操作数(常量或变量)的值更改 1。

增量++将值增加 1,而减量--将值减少 1。这两个运算符是一元运算符,这意味着它们仅对单个操作数进行操作。

// 自增自减运算符的使用
#include <stdio.h>
int main()
{int a = 10, b = 100;float c = 10.5, d = 100.5;printf("++a = %d \n", ++a);printf("--b = %d \n", --b);printf("++c = %f \n", ++c);printf("--d = %f \n", --d);return 0;
}

C 赋值运算符

运算符举例相等
=a = ba = b
+=a += ba = a+b
-=a -= ba = a-b
*=a *= ba = a*b
/=a /= ba = a/b
%=a %= ba = a%b
//赋值运算符的使用
#include <stdio.h>
int main()
{int a = 5, c;c = a;      // c 为 5printf("c = %d\n", c);c += a;     // c 为 10 printf("c = %d\n", c);c -= a;     // c 为 5printf("c = %d\n", c);c *= a;     // c 为 25printf("c = %d\n", c);c /= a;     // 为 is 5printf("c = %d\n", c);c %= a;     // c = 0printf("c = %d\n", c);return 0;
}

 C 关系运算符

操作员运算符的含义例子
==等于5 == 3被评估为 0
>大于5 > 3被评估为 1
<少于5 < 3被评估为 0
!=不等于5 != 3被评估为 1
>=大于或等于5 >= 3被评估为 1
<=小于或等于5 <= 3被评估为 0
// 关系运算符的使用
#include <stdio.h>
int main()
{int a = 5, b = 5, c = 10;printf("%d == %d 是 %d \n", a, b, a == b);printf("%d == %d 是 %d \n", a, c, a == c);printf("%d > %d 是 %d \n", a, b, a > b);printf("%d > %d 是 %d \n", a, c, a > c);printf("%d < %d 是 %d \n", a, b, a < b);printf("%d < %d 是 %d \n", a, c, a < c);printf("%d != %d 是 %d \n", a, b, a != b);printf("%d != %d 是 %d \n", a, c, a != c);printf("%d >= %d 是 %d \n", a, b, a >= b);printf("%d >= %d 是 %d \n", a, c, a >= c);printf("%d <= %d 是 %d \n", a, b, a <= b);printf("%d <= %d 是 %d \n", a, c, a <= c);return 0;
}

 

C 逻辑运算符

包含逻辑运算符的表达式返回 0 或 1,具体取决于表达式结果是 true 还是 false。逻辑运算符常用于判断语句。

操作员意义例子
&&逻辑与。仅当所有操作数都为真时才为真如果 c = 5 且 d = 2,则表达式((c==5) && (d>5))等于 0。
||逻辑或。仅当任一操作数为真时才为真如果 c = 5 且 d = 2,则表达式((c==5) || (d>5))等于 1。
逻辑非。仅当操作数为 0 时才为 True如果 c = 5,则表达式!(c==5)等于 0。

// 逻辑运算符的使用规则#include <stdio.h>
int main()
{int a = 5, b = 5, c = 10, result;   //result 用来存放结果result = (a == b) && (c > b);printf("(a == b) && (c > b) is %d \n", result);result = (a == b) && (c < b);printf("(a == b) && (c < b) is %d \n", result);result = (a == b) || (c < b);printf("(a == b) || (c < b) is %d \n", result);result = (a != b) || (c < b);printf("(a != b) || (c < b) is %d \n", result);result = !(a != b);printf("!(a != b) is %d \n", result);result = !(a == b);printf("!(a == b) is %d \n", result);return 0;
}

输出

(a == b) && (c > b) 为 1 
(a == b) && (c < b) 为 0 
(a == b) || (c < b) 是 1 
(a != b) || (c < b) 为 0 
!(a != b) 为 1 
!(a == b) 为 0
  • (a == b) && (c > 5)计算结果为 1,因为两个操作数(a == b)(c > b)都是 1(真)。
  • (a == b) && (c < b)计算结果为 0,因为操作数(c < b)为 0(假)。
  • (a == b) || (c < b)计算结果为 1,因为(a = b)为 1(真)。
  • (a != b) || (c < b)计算结果为 0,因为操作数(a != b)(c < b)均为 0(假)。
  • !(a != b)计算结果为 1,因为操作数(a != b)为 0(假)。因此,!(a != b) 为 1(真)。
  • !(a == b)计算结果为 0,因为(a == b)为 1(真)。因此,!(a == b)为 0(假)。

 C 位运算符

在计算过程中,加法、减法、乘法、除法等数学运算被转换为位级,这使得处理速度更快并节省功耗。

位运算符在 C 编程中用于执行位级运算。

运营商运算符的含义
&按位与
|按位或
^按位异或
按位求补
<<左移
>>右移

按位与运算符 &

如果两个操作数的相应位为1,则按位 AND 的输出为1。如果操作数的任一位为0,则相应位的结果将计算为0

在 C 编程中,按位 AND 运算符用 表示&

让我们假设两个整数1225的按位 AND 运算。

12 = 00001100(二进制)
25 = 00011001(二进制)12和25的位运算00001100
& 00011001________00001000 = 8(十进制)

事例按位与 

#include <stdio.h>int main() {int a = 12, b = 25;printf("Output = %d", a & b);return 0;
}

结果

输出=8

按位或运算符 |

如果两个操作数的至少一个对应位为1,则按位 OR 的输出为1。在 C 编程中,按位 OR 运算符用 表示|

12 = 00001100(二进制)
25 = 00011001(二进制)12 和 25 的按位或运算00001100
| 00011001________00011101 = 29(十进制)

#include <stdio.h>int main() {int a = 12, b = 25;printf("Output = %d", a | b);return 0;
}

 结果

输出 = 29

按位 XOR(异或)运算符 ^

如果两个操作数的相应位相反,则按位异或运算符的结果为1 。它用 表示^

12 = 00001100(二进制)
25 = 00011001(二进制)12 和 25 的按位异或运算00001100
^00011001________00010101 = 21(十进制)

#include <stdio.h>int main() {int a = 12, b = 25;printf("Output = %d", a ^ b);return 0;
}

结果

输出 = 21

按位补码运算符 ~

按位求补运算符是一种一元运算符(仅适用于一个操作数)。它将1更改为0,将0更改为1。它用 表示~

35 = 00100011(二进制)35 的按位求补运算
~ 00100011________11011100 = 220(十进制)

C 编程中按位补码运算符的扭转

35 ( )的按位补码~35-36而不是220,但为什么呢?

对于任意整数n, 按位求补n将会-(n + 1)。要理解这一点,您应该了解 2 的补码。

2的补码

二进制补码是对二进制数的运算。一个数的 2 补码等于该数的补码加 1。例如:

十进制 二进制 2 的补码0 00000000 -(11111111+1) = -00000000 = -0(十进制)1 00000001 -(11111110+1) = -11111111 = -256(十进制)12 00001100 -(11110011+1) = -11110100 = -244(十进制)220 11011100 -(00100011+1) = -00100100 = -36(十进制)注意:计算 2 的补码时,溢出被忽略。

35的按位补码是220(十进制)。220的 2 的补码是-36。因此,输出是-36而不是220

任何数字 N 的按位补码是 -(N+1)。就是这样:

N 的按位补码 = ~N(以 2 的补码形式表示)
~N 的 2' 补码= -(~(~N)+1) = -(N+1)

 按位补码

#include <stdio.h>int main() {printf("Output = %d\n", ~35);printf("Output = %d\n", ~-12);return 0;
}

 输出

输出=-36
输出 = 11

C 编程中的移位运算符

C 语言编程中有两种移位运算符:

  • 右移运算符
  • 左移运算符。

右移运算符

右移运算符将所有位向右移动一定数量的指定位。它用 表示>>

212 = 11010100(二进制)
212 >> 2 = 00110101 (二进制) [右移两位]
212 >> 7 = 00000001(二进制)
212 >> 8 = 00000000
212 >> 0 = 11010100(无移位)

左移运算符

左移运算符将所有位向左移动一定数量的指定位。左移运算符空出的位用0填充。左移运算符的符号是<<

212 = 11010100(二进制)
212<<1 = 110101000 (二进制) [左移一位]
212<<0 = 11010100(移 0)
212<<4 = 110101000000(二进制)=3392(十进制)

 移位运算符

#include <stdio.h>int main() {int num=212, i;for (i = 0; i <= 2; ++i) {printf("Right shift by %d: %d\n", i, num >> i);}printf("\n");for (i = 0; i <= 2; ++i) {printf("Left shift by %d: %d\n", i, num << i);    }return 0;
}

结果

右移 0:212
右移 1: 106
右移 2: 53左移 0:212
左移 1:424
左移 2:848

逗号运算符

逗号运算符用于将相关表达式链接在一起。例如:

int a, c = 5, d;

运算符的大小

sizeof一个一元运算符,返回数据的大小(常量、变量、数组、结构体等)。

#include <stdio.h>
int main()
{int a;float b;double c;char d;printf("Size of int=%lu bytes\n",sizeof(a));printf("Size of float=%lu bytes\n",sizeof(b));printf("Size of double=%lu bytes\n",sizeof(c));printf("Size of char=%lu byte\n",sizeof(d));return 0;
}

结果

int 的大小 = 4 字节
浮点数的大小 = 4 字节
双精度数的大小 = 8 字节
字符大小 = 1 字节

更多推荐

C语言34种运算符的用法解析

本文发布于:2023-11-16 07:42:29,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1614595.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:运算符   语言

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!