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

您所在的位置:网站首页 c语言输出运算符怎么输入 C语言34种运算符的用法解析

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

2024-07-13 07:51| 来源: 网络整理| 查看: 265

运算符优先级

优先级

运算符

名称或含义

使用形式

结合方向

说明

1

[]

数组下标

数组名[常量表达式]

左到右

()

圆括号

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

.

成员选择(对象)

对象.成员名

->

成员选择(指针)

对象指针->成员名

2

-

负号运算符

-表达式

右到左

单目运算符

(类型)

强制类型转换

(数据类型)表达式

++

自增运算符

++变量名 变量名++

单目运算符

--

自减运算符

--变量名 变量名--

单目运算符

*

取值运算符

*指针变量

单目运算符

&

取地址运算符

&变量名

单目运算符

!

逻辑非运算符

!表达式

单目运算符

~

按位取反运算符

~表达式

单目运算符

sizeof

长度运算符

sizeof(表达式)

3

/

表达式 / 表达式

左到右

双目运算符

*

表达式*表达式

双目运算符

%

余数(取模)

整型表达式%整型表达式

双目运算符

4

+

表达式+表达式

左到右

双目运算符

-

表达式-表达式

双目运算符

5

表达式

双目运算符

6

>

大于

表达式>表达式

左到右

双目运算符

>=

大于等于

表达式>=表达式

双目运算符

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 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 运算符用 表示&。

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

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

事例按位与 

#include 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 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 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 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填充。左移运算符的符号是



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3