news 2026/5/1 7:23:24

五、操作符(C语言)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
五、操作符(C语言)

1、算数操作符

(1)加+

(2)减-

(3)乘*

(4)除/

A 整数的除法

7/2

B 浮点型的除法

7.0/2 7/2.0 7.0/2.0

(5)取模%

int a = 7 % 2; //输出1 //%的前后必须为整数

2、移位操作符

移位操作符的操作数只能是整数。移位的是二进制数。

整数的二进制有三种:源码、补码、反码。正的整数原码、补码、反码相同;负的整数原码、补码、反码要计算。整数在内存中存储的是补码。

//7 //00000000000000000000000000000111-原码 //00000000000000000000000000000111-反码 //00000000000000000000000000000111-补码 //-7 //10000000000000000000000000000111-源码 //11111111111111111111111111111000-反码 //11111111111111111111111111111001-补码(反码+1)

(1)左移位操作符<<

正数左移

int main() { int a = 7; int b = a << 1; printf("a=%d\n", a); //7 printf("b=%d\n", b); //14 return 0; }

负数左移

int main() { int a = -7; int b = a << 1; printf("a=%d\n", a); //7 printf("b=%d\n", b); //-14 return 0; }

(2)右移位操作符>>

算数移位:右边丢弃,左边补原符号位。

逻辑移位:右边丢弃,左边补0。

正数右移

int main() { int a = 7; int b = a >> 1; printf("a=%d\n", a); //7 printf("b=%d\n", b); //3 return 0; }

负数右移(VS编译器使用算数右移)

int main() { int a = -7; int b = a >> 1; printf("a=%d\n", a); //-7 printf("b=%d\n", b); //-4 return 0; }

3、位操作符

(1)按位与&

整数的二进制数各位上两者都是1的,按位与后的补码也是1,其他是0

int main() { int a = 3; int b = -5; int c = a & b; //00000000000000000000000000000011- 3 的补码 //10000000000000000000000000000101- -5 的原码 //11111111111111111111111111111010 //11111111111111111111111111111011- -5 的补码 //00000000000000000000000000000011 printf("c=%d\n", c); //3 return 0; }

(2)按位或|

整数的二进制数各位上只要出现1的,按位或后的补码是1,其他是0

int main() { int a = 3; int b = -5; int c = a | b; //00000000000000000000000000000011- 3 的补码 //10000000000000000000000000000101- -5 的原码 //11111111111111111111111111111010 //11111111111111111111111111111011- -5 的补码 //11111111111111111111111111111011 printf("c=%d\n", c); //-5 return 0; }

(3)按位异或^

整数的二进制数各位上,相同的是0,不同的是1

int main() { int a = 3; int b = -5; int c = a ^ b; //00000000000000000000000000000011- 3 的补码 //10000000000000000000000000000101- -5 的原码 //11111111111111111111111111111010 //11111111111111111111111111111011- -5 的补码 //11111111111111111111111111111000 printf("c=%d\n", c); //-8 return 0; }

(4)位操作符的应用

不使用临时变量,实现两个整数的交换。

方法一:使用按位与、按位或。

int main() { int a = 3; int b = -5; printf("c1=%d\n", a & b); //3 printf("c2=%d\n", a | b); //-5 return 0; }

方法二:使用按位异或

int main() { int a = 3; int b = 5; a = a ^ b; //a=3^5 b = a ^ b; //b=3^5^5 —> b=3 a = a ^ b; //a=3^5^3 —> a=5 return 0; }

4、赋值操作符

=、+=、-=、&=、|=、^=、>>=、<<=

int main() { int a = 0;//初始化 int b = 0; b = 20;//赋值 a = a + 5; a += 5; a = a >> 1; a >>= 1; a = a - 1; a -= 1; return 0; }

5、单目操作符

(1)逻辑反操作 !

int main() { int flag = 3; if (!flag) printf("hehe\n"); else printf("xixi\n"); //输出xixi return 0; }

(2)负值 -

int a = -1;

(3)正值 +

int a = +1;

(4)取地址 &

int a = 3; int* p = &a;

(5)操作数的类型长度(单位:字节) sizeof

int a = 10; int n = sizeof(a);

(6)对一个数的二进制位取反 ~

int a = 0; printf("*d\n", ~a); //输出-1

(7)前置、后置 --

(8)前置、后置 ++

int main() { int a = 3; int b = ++a;//前置++,先++,后使用 printf("%d\n", a);//输出4 printf("%d\n", b);//输出4 }
int main() { int a = 3; int b = a++;//后置++,先使用,后++ printf("%d\n", a);//输出4 printf("%d\n", b);//输出3 }

(9)间接访问操作符(解引用操作符) *

int a = 10; int* p = &a; *p = 20;

(10)强制类型转换 (类型)

int a = (int) 3.14;
srand((unsigned int)time(NULL)); //time()函数的返回值类型为time_t

6、关系操作符

>、>=、<、<=、!=、==

7、逻辑操作符

(1)逻辑与 &&

两个条件都要满足才为真。

(2)逻辑或 ||

两个条件满足一个就为真。

int main() { int a = 3; int b = 0; int c = a && b; //并且 int l = a || b; //或者 printf("c=%d\n", c); //输出0 printf("l=%d\n", l); //输出1 return 0; }

8、条件操作符

if (a > 5) b = 3; else b = -3; (a > 5) ? (b = 3) : (b = -3);

9、逗号表达式

int a = 1; int b = 2; int c = (a > b, a = b + 10, a, b = a + 1); printf("%d\n", c); //输出13

10、下标引用、函数调用和结构成员

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 7:21:34

通用树形结构构建器:Java高性能工具类封装

先展示完整代码&#xff1a;package com.pig4cloud.pigx.common.core.util.tree;import java.util.*; import java.util.function.Function; import java.util.stream.Collectors;/*** 通用树结构构建工具类** <p>重要说明&#xff1a;* <ol>* <li>所有节点…

作者头像 李华
网站建设 2026/5/1 5:07:32

Java面试题及答案总结(互联网大厂新版)

这套面试题主要目的是帮助那些还没有java软件开发实际工作经验&#xff0c;而正在努力寻找java软件开发工作的朋友在笔试时更好地赢得笔试和面试。由于这套面试题涉及的范围很泛&#xff0c;很广&#xff0c;很杂&#xff0c;大家不可能一天两天就看完和学完这套面试宝典&#…

作者头像 李华
网站建设 2026/4/23 10:42:19

【68】颜色直方图详解与Python实现

简介 本文围绕颜色直方图这一计算机视觉领域的基础颜色特征展开&#xff0c;从原理讲起&#xff0c;详细介绍其在OpenCV-Python中的实现方法&#xff0c;覆盖RGB与HSV两种颜色空间的直方图计算与可视化&#xff0c;并对比分析两种空间的特点——帮助读者理解颜色直方图的应用场…

作者头像 李华
网站建设 2026/5/1 5:00:50

Wi-Fi 7路由器核心特性对比分析

在当下处于高速发展态势的家庭网络环境里&#xff0c;Wi-Fi 7技术的普及意味着无线连接步入了一个全新的阶段。那些具有支持这一前沿性标准功能的路由器产品&#xff0c;它们除了在理论速率方面达成了飞跃之外&#xff0c;还借助一系列创新技术把高密度连接、低延迟传输以及网络…

作者头像 李华
网站建设 2026/5/1 7:10:38

全链路CRM系统横向对比:业务、生产、项目与上下游的深度博弈

在企业数字化转型中&#xff0c;CRM系统的价值早已超越“客户管理”——从前端销售到后端生产&#xff0c;从内部流程到上下游协同&#xff0c;全链路能力成为企业选择CRM的核心考量。本文选取超兔一体云、Freshsales、智赢云、钉钉CRM、销售易、Zoho CRM、HubSpot CRM七大主流…

作者头像 李华
网站建设 2026/5/1 6:04:22

textoon live2d

生成数字人 https://github.com/xiaomingnio/live2d_speech_bot 模型下载&#xff1a; https://civitai.com/models/125907/realcartoon-xl sdxl-动漫二次元_2.0.safetensors 夸克网盘分享&#xff1a; https://pan.quark.cn/s/adc20b616a30

作者头像 李华