[C语言]操作符

news2024/9/21 19:01:46

目录

1.操作符分类

2.算术操作符 

3.位移操作符

3.1左移操作符

3.2右移操作符

4.位操作符

4.1’&‘(按位与) 

4.2’|‘(按位或)

 4.3‘^’(按位异或)

5.赋值操作符

5.1复合赋值符

6.单目操作符

6.1'!'(逻辑反操作)

6.2‘+’与‘-’(正负值)

6.3‘&’与‘*’(取地址与解引用)

6.4sizeof

6.5‘~’(二进制位取反)

6.6前后置‘++’与‘--’

6.7(类型)强制类型转换

7.关系操作符

8.逻辑操作符

9.条件操作符

10.逗号表达式

11.下标引用、函数调用和结构成员的相应操作符

11.1下标引用操作符

11.2函数调用操作符

11.3访问结构体成员运用到的操作符


1.操作符分类

  • 算术操作符
  • 移位操作符
  • 位操作符
  • 赋值操作符
  • 单目操作符
  • 关系操作符
  • 逻辑操作符
  • 条件操作符
  • 逗号表达式
  • 下标引用、函数调用和结构成员

2.算术操作符 

+   -   *   /   %

         除了‘%’,其他操作符均可以作用于整数与浮点数。

        ‘/’如果两边的操作数均为整数,则结果为整数,有浮点数操作数则结果为浮点数。

        ‘%’两边的操作数均要为整数

3.位移操作符

<< 左移操作符

>> 右移操作符

        位移操作符只能作用于整数 

3.1左移操作符

        移位规则:左边抛弃,右边补0

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

        整数左移1位相当于乘以2.

        当左移的整数为负数时,是对其补码进行左边抛弃右边补0。在打印的时候将左移后得到的新补码复原成原码进行打印。

        负数:原码转化成补码(取反后+1)

                  补码转化成原码(取反后+1,或-1后取反)

3.2右移操作符

        移位规则:1. 逻辑移位
                        左边用0填充,右边丢弃
                        2. 算术移位
                        左边用原该值的符号位填充,右边丢弃

                我们一般使用的右移是算术移位

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

4.位操作符

& //按位与

|  //按位或

^  //按位异或

位操作符的操作数必须为整数。

4.1’&‘(按位与) 

        有0则为0,两1则为1。

int main()
{
	int a = 10;
	int b = 2;
	int c = a & b;
	printf("c=%d", c);
	return 0;
}

4.2’|‘(按位或)

        有1则为1,两0才为0 

int main()
{
	int a = 10;
	int b = 2;
	int c = a | b;
	printf("c=%d", c);
	return 0;
}

 4.3‘^’(按位异或)

        不同则为1,相同则为0

        按位异或支持交换律:a^b^a == a^a^b

                                      且a^0 = a

int main()
{
	int a = 10;
	int b = 2;
	int c = a ^ b;
	printf("c=%d", c);
	return 0;
}

         按位异或的简单应用:(1条消息) [C语言]两个变量实现两个数互换_HY_PIGIE的博客-CSDN博客

5.赋值操作符

= //将值赋给变量

5.1复合赋值符

  • +=
  • -=
  • *=
  • /=
  • %=
  • >>=
  • <<=
  • &=
  • |=
  • ^=
int a = 5;
a += 1;等价于a = a+1;

        其他操作符也是一样的道理

6.单目操作符

        单目操作符即只运用到单个操作数上

        即a = -a 与 a = a-1;中两个‘-’的含义是不同的。

        第一个是单目操作符,把a的值变成负值。

        第二个是算术操作符,减号的含义

!
-
+
&
sizeof
~
--
++
(类型)
*
逻辑反操作
负值
正值
取地址
操作数的类型长度(以字节为单位)
对一个数的二进制按位取反
前置、后置--
前置、后置++
强制类型转换
间接访问操作符(解引用操作符)

6.1'!'(逻辑反操作)

        在c语言中,0表示为假,非0表示为真。!能把假的变为真,真的变为假。

        a = 0;

        !a = 1;

6.2‘+’与‘-’(正负值)

        ‘+’与‘-’把数值相应的变成正数或负数

6.3‘&’与‘*’(取地址与解引用)

        取地址:只要目标是一个变量,就可以取其地址。数组,结构体都有其地址

int a = 2;
int *pa = &a;//表示为取a的地址,即将a的地址存放到指针变量pa当中

        解引用:通过地址找到相应的变量的值

int a = 5;
char ch = 'z';

int *pa = &a;
char *pch = &ch;

printf("pa=%p pch=%p\n", pa, pch);
printf("*pa=%d *pch=%c",*pa,*pch);

6.4sizeof

        sizeof用来计算操作数的类型长度,以字节为单位,且其内部不进行任何运算。

int main()
{
	int a = 0;
	short b = 2;
	printf("%d\n", sizeof(b = a + 2));
	printf("%d", b);
	return 0;
}

         打印结果为:2

                             2

        sizeof内部不进行运算,所以b的值没有变化

6.5‘~’(二进制位取反)

        将一个整数的二进制位进行取反,不区分符号位统统进行取反处理

int main()
{
	int a = 0;
	printf("%d", ~a);
	return 0;
}

        整数0的二进制位:00000000 00000000 00000000 00000000

                       取反后:11111111 11111111 11111111 11111111,得到-1

6.6前后置‘++’与‘--’

        此处使用‘++’举例,‘--’同理

        前置‘++’,即++a,是先使a+1后再使用a+1

        后置‘++’,即a++,是先使用a,使用完后再使a+1

int main()
{
	int a = 5;
	int b = a++;//后置++,先使用a再使a+1,所以此处b=a=5,a=a+1=6;
	int c = ++a;//前置++,先使a+1再使用a+1,所以此处a=a+1=7,c=7;
	printf("%d %d %d", a, b, c);//a=7,b=5,c=7;
	return 0;
}

6.7(类型)强制类型转换

        强制类型转换就是把变量从一种类型转换到另一种类型。

        将浮点数3.14强制转换成int类型后可以存储到int型的变量a当中,a也只取到了3.14的整数部分

int main()
{
	int a = (int)3.14;
	printf("%d", a);
	return 0;
}

7.关系操作符

>
>=
<
<=
!= 用于测试“不相等”
== 用于测试“相等”

8.逻辑操作符

&& //逻辑与

||   //逻辑或

         值得注意的是,在逻辑与中:

                当操作符左边为假时,右边则不进行计算

                                在逻辑或中:

                当操作符左边为真时,右边则不进行计算

1.逻辑与eg:

int main()
{
	int a = 0;
	int b = 2;
	int c = 3;
	int d = 4;
	int i = 0;
	i = a++ && ++b && d++;//a++为后置++,先使用a的数值,在使a+1,在c语言中0代表为假
						  //在逻辑与左边为假时,判断结束,右边不进行计算。
	printf("a = %d\nb = %d\nc = %d\nd = %d\n", a, b, c, d);
	return 0;
}

        当把a换成非0数时,结果就会大不相同。 

 2.逻辑或eg:

int main()
{
	int a = 0;
	int b = 2;
	int c = 3;
	int d = 4;
	int i = 0;
	i = a++ || ++b || d++;//逻辑或在左边为真时,右边不进行计算
						  //a++为后置++,先使用a的值,a=0,为假,后a=a+1;
						  //++b为前置++,先使b=b+1=3,非0数即为真,到此处逻辑或判断结束
						  //后面不进行计算
	printf("a = %d\nb = %d\nc = %d\nd = %d\n", a, b, c, d);
	return 0;
}

9.条件操作符

exp1 ? exp2 : exp3

         先判断exp1的结果,如果exp1的结果为真则返回exp2

                                        如果exp1的结果为假则返回exp3

int main()
{
	int a = 5;
	int b = 10;
	int c = a > b ? a : b;//a>b为假,返回b的值
	printf("两者中较大值为:%d", c);
	return 0;
}

10.逗号表达式

exp1, exp2, exp3, …expN

         用逗号隔开多个表达式,从左向右以此执行,以最后一个表达式的结果作为整个逗号表达式的结果

int main()
{
	int a = 1;
	int b = 2;
	int c = (a > b, a = b + 10, a, b = a + 1);//从左到右依次执行
	printf("%d", c);                          //以最后的表达式为整个表达式的结果
	return 0;
}

11.下标引用、函数调用和结构成员的相应操作符

11.1下标引用操作符

[ ] //引用下标

        操作数为:数组名 + 索引值

int arr[4]={1,2,3,4};
printf("%d",arr[0]);//使用下标引用操作数,打印与索引值相同的下标对应存储的数值

11.2函数调用操作符

( ) //函数调用操作符

int cmp(int a, int b)//操作数为,函数名+相应参数
{
	return a > b ? a : b;
}
int main()
{
	int a = 2;
	int b = 10;
	int c=cmp(a, b);
	printf("较大值为:%d", c);//()为函数调用的操作符
	return 0;
}

11.3访问结构体成员运用到的操作符

.
->
结构体.成员名
结构体指针->成员名
struct s
{
	int age;
	char name[10];
};
int main()
{
	struct s people = { 10,"zhangsan" };
	struct s* ps =&people;
	printf("%d %s\n", ps->age, ps->name);
	printf("%d %s", people.age, people.name);
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/188742.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IDEA搭建Finchley.SR2版本的SpringCloud父子基础项目-------Hystrix断路器

1.1分布式系统面临的问题 复杂分布式体系结构中的应用程序有数十个依赖关系&#xff0c;每个依赖关系在某些时候将不可避免地失败。 服务雪崩 多个微服务之间调用的时候&#xff0c;假设微服务A调用微服务B和微服务C&#xff0c;微服务B和微服务C又调用其它的微服务&#xff0…

高薪前端都应该具备的开发好习惯

格拉德威尔曾提出过一个“一万小时定律”&#xff0c;即任何人从平凡到大师的必要条件&#xff0c;就是历经1万小时的锤炼&#xff0c;而这“1万小时”也不是达到就行&#xff1b;如何构成&#xff0c;才是能否成为行业资深的关键。总结起来&#xff0c;就是四个字&#xff1a;…

Databend 开源周报 第 77 期

Databend 是一款强大的云数仓。专为弹性和高效设计。自由且开源。 即刻体验云服务&#xff1a;https://app.databend.com 。 What’s New 探索 Databend 本周新进展&#xff0c;遇到更贴近你心意的 Databend 。 Features & Improvements Meta 使用 expressin::TableSch…

蓝桥杯单片机快速得奖方法(分享一些实用技巧)

文章目录前言一、蓝桥杯单片机痛点1.LED灯微亮2.数码管微亮3.蜂鸣器乱叫4.驱动程序不会写5.按键程序灵敏度低容易误操作6.矩阵按键代码总是记不住一写就忘记7.使用大量延时函数导致程序运行效率低下二、痛点解决方法1.锁存器的错误操作2.代码不熟练3.没有高效的代码总结前言 又…

微信小程序 java python django加油站服务系统

目 录 摘 要 I ABSTRACT II 第一章 绪 论 1 1.1选题背景 2 1.2研究现状 3 1.3研究内容 7 第二章 开发工具及关键技术介绍 8 2.1微信开发者工具 8 2.2小程序框架以及目录结构介绍 8 第三章 系统分析 10 3.1需求分析 10 3.2可行性分析 1…

Appium是如何工作的

Appium是由node.js开发的开源自动化测试工具&#xff0c;可用来测试移动端的Native、Hybrid和移动Web应用&#xff0c;被测平台包括Android和iOS&#xff08;最近宣称已支持Windows&#xff09;。 Native apps – 使用Android、iOS和Windows SDK开发的应用。 Mobile web apps …

存储区域网络将占下一代数据存储市场的 7%

根据 Future Market Insights 的最新行业分析&#xff0c;全球存储区域网络 (SAN) 市场预计将显示稳定的增长机会&#xff0c;在 2022 年至 2029 年的评估期内复合年增长率约为 3.9%。 2021 年全球市场估值达到 195.76 亿美元&#xff0c;到 2029 年将进一步扩大至 268.67 亿美…

车载以太网 - SomeIP测试专栏 - SomeIP Entry - 04

前面总纲内容有说,车载以太网中的SomeIP内容是非常多的,并且为了实现SOA的相关需求,提供了多种多样的报文类型,因此也就有了今天要说的SomeIP-SD中的重要组成部分之一的条目(Entry)部分,而SomeIP-SD在车载网络中占有相当大的比重,可以当做是一定要实现的,如果这块不实…

实现自己的数据库四

一前言上一篇已经说明了B树的一些原理&#xff0c;也讲到&#xff0c;我们目前采用的持久化数据的方式&#xff0c;而且我们是单独的插入数据&#xff0c;没有任何元数据信息&#xff0c;虽然插入的速度很快&#xff0c;因为是采用追加的方式。但是这种方式插入速度很快&#x…

Pd1 药物研发进展|销售数据|市场规模|竞争格局|前景分析

Programmed Death-1 (PD-1; CD279) 是一种在活化 T 细胞中诱导的抑制性受体&#xff0c;作为多种癌症的一线治疗药物。然而&#xff0c;严重的免疫相关不良反应限制了PD-1/PD-L1单克隆抗体的临床应用&#xff0c;尽管其疗效良好。 也迫切需要开发针对 PD-1/PD-L1 轴的新型抑制剂…

Torch 论文复现:Vision Transformer (ViT)

论文标题&#xff1a;An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale 从 TPUv3-core-days 可以看到&#xff0c;ViT 所需的训练时间比 ResNet 更短&#xff0c;同时 ViT 取得了更高的准确率 ViT 的基本思想是&#xff0c;把一张图片拆分成若干个…

Paddle入门实战系列(四):中文场景文字识别

✨写在前面&#xff1a;强烈推荐给大家一个优秀的人工智能学习网站&#xff0c;内容包括人工智能基础、机器学习、深度学习神经网络等&#xff0c;详细介绍各部分概念及实战教程&#xff0c;通俗易懂&#xff0c;非常适合人工智能领域初学者及研究者学习。➡️点击跳转到网站。…

每日学术速递1.31

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 今天带来的arXiv上最新发表的3篇NLP论文。 Subjects: cs.CL、cs.AI、cs.DB、cs.LG 1.Editing Language Model-based Knowledge Graph Embeddings 标题&#xff1a;编辑基于语言模型的知识图谱嵌入 作…

C语言求幂运算——奇特中文变量命名

写在前面 主要涉及C/C趣味编程应用及解析面向初学者撰写专栏&#xff0c;个人代码原创如有错误之处请各位读者指正&#xff0c;各位可以类比做自己的编程作业请读者评论回复、参与投票&#xff0c;反馈给作者&#xff0c;我会获得持续更新各类干货的动力。 致粉丝&#xff1a;…

【Rust】8. 包、Crate 和 模块管理(公有、私有特性)

8.1 包和 Crate 8.1.1 基本概念 crate 是 Rust 在编译时最小的代码单位&#xff1b;crate 有两种形式&#xff1a;二进制项&#xff08;可以被编译为可执行程序&#xff09;和库&#xff08;没有 main 函数&#xff0c;也不会编译为可执行程序&#xff0c;而是提供一些诸如函…

Selenium+Java+Maven(12):引入Allure作为报告生成器

一、前言 本篇作为SeleniumJava系列的补充&#xff0c;讲了如何使用Allure作为测试报告生成器&#xff0c;来替代TestNG自带的测试报告或ReportNG测试报告&#xff0c;生成更加美观的&#xff08;领导更喜欢的&#xff09;测试报表。话不多说&#xff0c;一起来学习吧~ 二、A…

蒙特卡洛算法详解

蒙特卡洛算法是20世纪十大最伟大的算法之一&#xff0c;阿法狗就采用了蒙特卡洛算法。 1、定义 蒙特卡洛方法也称为 计算机随机模拟方法&#xff0c;它源于世界著名的赌城——摩纳哥的Monte Carlo(蒙特卡洛)。 它是基于对大量事件的统计结果来实现一些确定性问题的计算。其实…

什么是独立性?如何提高独立性?

独立是每个人必经的成长阶段&#xff0c;也是实现人生价值最重要的途径。没有独立就不能实现真正意义上的人生。独立是我们克服困难、实现抱负的最重要的精神力量&#xff0c;也是我们收获幸福的保障。1、什么是独立性&#xff1f;独立性是意志指不受他人影响、能够独立解决问题…

迟到两年的求职总结经验分享

迟到两年的求职总结&经验分享 写在前面 ​ 号主于2021年3月-2021年9月断断续续参加了校园招聘&#xff0c;包括但不限于&#xff1a;暑期实习、秋招提前批、秋招正式批。收获offer包括但不限于&#xff1a;某互联网推荐算法工程师、某通讯公司数据挖掘工程师、某金融科技…

docker 安装mysql8

docker 安装mysql8无法远程登录 # 启动容器 docker run \ -p 13306:3306 \ --name mysql \ --privilegedtrue \ --restartalways \ -v /home/mysqldata/mysql:/etc/mysql \ -v /home/mysqldata/mysql/logs:/logs \ -v /home/mysqldata/mysql/data:/var/lib/mysql \ -v /etc/l…