一篇文章解决C语言操作符

news2024/9/28 18:47:22

我的主页一只认真写代码的程序猿
本文章是关于C语言操作符的讲解
收录于专栏【C语言的学习】


目录

1、算术操作符

2、赋值操作符

3、关系操作符

4、条件操作符(三目)

5、逻辑操作符

6、单目操作符

7、移位操作符

8、位操作符 

9、逗号表达式

10、下标引用

11、函数调用

12、结构体成员


1、算术操作符

加+减-乘*除/模%

需要注意
%模操作符的两个操作数都必须为整型。
其他操作符可以作用于浮点数或整型。
/操作符,如果两个数都为整型,则结果也为整型;只要有一个是浮点数,结果就为浮点数。


2、赋值操作符

连续赋值:a=b=c+1;这段代码的意思是c+1赋给b再将b赋给a。
这种写法不建议。
复合赋值符

+=-=/=%=>>=
<<=&=|=^=*=

int a=3;
a+=2;等价于a=a+2;
a<<=2;等价于a=a<<2;


3、关系操作符

>>===
<<=!=

==是关系判断,=是赋值操作符
 


4、条件操作符(三目)

exp1?exp2:exp3意思是exp1成立吗?成立的话执行exp2,否则执行exp3

 if(a>1)b=1;
        else b=2;
换成三目表达式:a>1?b=1:b=2;

 


5、逻辑操作符
 

&&  逻辑与||   逻辑或

注意:

  1. &&的两个操作数全为真,结果才为1;否则为0.如果第一个条件为假,则后面的表达式不进行运算,逻辑与的结果的假。
  2. ||的两个操作数有一个真,结果就为真;全假才为0.如果第一个条件为真,则后面的表达式不进行运算,逻辑或的结果为真。

#include <stdio.h>
int main()
{
    int i=0,a=0,b=2,c=3,d=4;
    i=a++&&++b&&d++;
    printf("i=%d\na=%d\nb=%d\nc=%d\nd=%d\n",i,a,b,c,d);
    // i=0 a=1 b=2 c=3 d=4
    i=0,a=0,b=2,c=3,d=4;
    i=a++||++b||d++;
    printf("i=%d\na=%d\nb=%d\nc=%d\nd=%d\n",i,a,b,c,d);
    // i=1 a=1 b=3 c=3 d=4
}

 


 6、单目操作符

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

单目操作符只有一个操作数,双目操作符有两个操作数(a+b的操作数是a和b)

!逻辑反

 -和+

#include <stdio.h>
int main()
{
    //+一般省略
    int a=-3;
    int b=-a;
    printf("%d",b);//b为3
}

 &和*

 sizeof()

#include <stdio.h>
int main()
{
    char c='a';
    char ch1[]="abc";
    char ch2[]={'a','b','c'};
    int arr[10]={0};//数组的类型是去处数组名剩下的部分,这里是int [10]
    printf("c:%d\n",sizeof(c));
    //一个char占1字节
    printf("ch1[]:%d\n",sizeof(ch1));
    //一个char是1个字节,字符串有abc\0共四个字符,总共4字节
    printf("ch2[]:%d\n",sizeof(ch2));
    //ch2数组中只有abc三个元素,所以是3字节
    printf("arr[]:%d\n",sizeof(arr));
    //一个int占4字节,数组有10个元素,总共40字节
    printf("int [5]=%d\n",sizeof(int[5]));
    //20个字节

//---------------------指针类型如下------------------

    printf("char*=%d\n",sizeof(char*));
    printf("int*=%d\n",sizeof(int*));
    printf("double*=%d\n",sizeof(double*));
    //无论是char*、int*、double*等等,都是一个指针类型,
    //32位操作系统下指针只占4字节;64位下占8字节

}

注意:sizeof()内的表达式是不会真实进行运算的。(如下代码)

 ~按位取反

前置后置++和--

 (类型)强制类型转换

 


7、移位操作符

左移操作符<<右移操作符>>

左移操作符:左边去除、右边补0(左移有乘2的效果)
右移操作符:
1、算术右移:右边丢弃,左边补原符号位
2、逻辑右移:右边丢弃,左边补0

移位操作符是指将某个数的二进制位进行移动:
如下a=1;左移一位之后输出为2

整数的二进制表示有:原码、反码、补码。
存储到内存中的是补码
正数的原反补相同

负数规则如下:

原码 按位取反 得到反码;
反码     加1      得到补码;

int a=-1;

1000 0000 0000 0000 0000 0000 0000 0001   原码

1111  1111 1111  1111  1111  1111  1111  1110   反码

1111  1111 1111  1111  1111  1111  1111  1111   补码

 注意:
不要移动负数位(a<<-1),这个标准是不被定义的。
只能作用于整数,不能是浮点数

 


8、位操作符 

按位与  &按位或  |按位异或  ^

位操作符是对二进制位进行操作,计算机进行运算是用补码进行运算。运算的结果转化为原码进行输出。内存中的存储是补码。

注意:操作数只能是整数、正数的原反补码都相同。
下图计算3与-3操作后的值:>

 位操作符的一个应用:不创建临时变量交换两个数。

一个数对自己进行异或,结果为0 

a = a^b;此时不妨将a认定为a^b便于理解

b = b^a就是b = b^a^b,也就是 b=b^b^a,所以此时b=a;

a = a^b,由于此时b已经变成a了,所以原式等价于 a = (a^b)^a;所以a转换成b

 


9、逗号表达式

exp1,exp2,exp3,......expN

逗号表达式,由逗号隔开的多个表达式,从左向右依次进行运算,逗号表达式的结果是最后一个表达式的结果。
例:int i=(2+1,3+1,2+3);    i的值为5


10、下标引用

[ ] 下标引用操作符

操作数:一个数组名 + 一个索引值 

int arr[10];
arr[9] = 10;
[ ]的两个操作数是arr和9。


11、函数调用

( ) 函数调用操作符
接受一个或者多个操作数:第一个操作数是函数名,剩余的操作数就是传递给函数的参数。

 


12、结构体成员

.           结构体.成员名
->         结构体指针->成员名
#include <stdio.h>
#include <stdio.h>
struct Book
{
    char name[10];
    int price;
};
int main()
{
    struct Book book={"C语言",20};
    struct Book*pb=&book;
    printf("%s %d\n",book.name,book.price);
    printf("%s %d\n",pb->name,pb->price);
}

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

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

相关文章

使用Docker+Nignx部署vue项目

文章目录一、前言二、vue项目打包三、nginx基本介绍①nginx常用的功能&#xff1a;②nginx默认的主题配置文件解读③nginx目录解读三、docker内部署nginx①拉取nginx镜像②创建数据持久化目录☆☆☆③创建需要映射进去的文件④运行nginx四、大工告成最近&#xff08;之前&#…

2023年DAMA-CDGA/CDGP数据治理工程师认证(线上班)报名

DAMA认证为数据管理专业人士提供职业目标晋升规划&#xff0c;彰显了职业发展里程碑及发展阶梯定义&#xff0c;帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力&#xff0c;促进开展工作实践应用及实际问题解决&#xff0c;形成企业所需的新数字经济下的核心职业…

gcc、g++,linux升级gcc、g++

安装cv-cuda库&#xff0c;要求gcc11&#xff0c;cmake>3.22版本。 Linux distro:Ubuntu x86_64 > 18.04WSL2 with Ubuntu > 20.04 (tested with 20.04) CUDA Driver > 11.7 (Not tested on 12.0) GCC > 11.0 Python > 3.7 cmake > 3.22gcc、g介绍 参考&…

手把手安装GNN必备库 —— pytorch_geometric

0 BackGround GNN&#xff1a;图神经网络&#xff0c;由于传统的CNN网络无法表示顶点和边这种关系型数据&#xff0c;便出现了图神经网络解决这种图数据的表示问题&#xff0c;这属于CNN往图方向的应用扩展。 GCN&#xff1a;图卷积神经网络&#xff0c;GNN在训练过程中&#…

【ONE·R || 两次作业(二):GEO数据处理下载分析】

总言 两次作业汇报其二&#xff1a;GEO数据处理学习汇报。    文章目录总言2、作业二&#xff1a;GEO数据处理下载分析2.1、GEO数据库下载前准备2.2、GEO数据库下载及数据初步处理2.2.1、分阶段解析演示2.2.1.1、编号下载流程2.2.1.2、对gset[ 1 ]初步分析2.2.1.3、对gset[ 2…

基于requests框架实现接口自动化测试项目实战

requests库是一个常用的用于http请求的模块&#xff0c;它使用python语言编写&#xff0c;在当下python系列的接口自动化中应用广泛&#xff0c;本文将带领大家深入学习这个库&#xff0c;Python环境的安装就不在这里赘述了&#xff0c;我们直接开干。 01 requests的安装 win…

销售结束语话术

销售要记住&#xff0c;结束语不代表结束&#xff0c;而是下一次沟通的开始&#xff0c;所以销售要学会通过结束语来为自己争取下次沟通的机会。 前言 不论是哪一行业&#xff0c;对于销售而言&#xff0c;大多数成交的客户都是经过持续有效的跟踪的&#xff0c;还会出现有很多…

Java设计模式-原型模式Prototype

介绍 当我们有一个类的实例&#xff08;Prototype&#xff09;并且我们想通过复制原型来创建新对象时&#xff0c;通常使用Prototype模式。 原型模式是一种创建型设计模式。能够复制已有对象&#xff0c; 而又无需使代码依赖它们所属的类。 场景举例 现在有一只羊 tom&#xf…

iTerm2连接ssh配置

iTerm2连接ssh配置 #首先在/Users目录下按照如下命令创建sh脚本 cd /Users/#创建iterm文件夹 mkdir iterm#进入iterm文件夹 cd iterm#创建myserver.sh文件 touch myserver.sh#编辑myserver.sh文件 vi myserver.sh如果出现没有权限&#xff0c;就命令前面加上sudo 键盘输入i编…

斯皮尔曼相关(spearman)相关性分析一文详解+python实例代码

前言 相关性分析算是很多算法以及建模的基础知识之一了&#xff0c;十分经典。关于许多特征关联关系以及相关趋势都可以利用相关性分析计算表达。其中常见的相关性系数就有三种&#xff1a;person相关系数&#xff0c;spearman相关系数&#xff0c;Kendalls tau-b等级相关系数…

Java + OpenCv 根据PID/VID调用指定摄像头

问题&#xff1a; 主机接入了多个USB摄像头&#xff0c;传统的OpenCv是用摄像头插入usb的下标调取的&#xff0c;如过只接入一个摄像头那直接使用capture.open(0);这种方式调用没有任何问题&#xff0c;多个的话&#xff0c;就会出现问题&#xff0c;因为USB拔插时候对应摄像头…

用原生的方式写vue组件之深度剖析组件内部的原理

目录前言一&#xff0c;对组件的复习及理解二&#xff0c;模块化与组件化三&#xff0c;用原生的方式写vue组件3.1 准备工作3.2 创建组件3.3 组件中的data为什么是函数式写法3.4 组件中的template四&#xff0c;注册组件五&#xff0c;使用组件六&#xff0c;全局组件七&#x…

阿里云服务器ECS购买教程

本文是关于阿里云主机&#xff08;服务器ECS&#xff09;购买流程的一个详细介绍。阿里云服务器&#xff08;Elastic Compute Service&#xff0c;简称 ECS&#xff09;是一种简单高效、处理能力可弹性伸缩的计算服务&#xff0c;帮助您快速构建更稳定、安全的应用&#xff0c;…

机器学习实战教程(十二):线性回归提高篇

一、前言本篇文章讲解线性回归的缩减方法&#xff0c;岭回归以及逐步线性回归&#xff0c;同时熟悉sklearn的岭回归使用方法&#xff0c;对乐高玩具套件的二手价格做出预测。二、岭回归如果数据的特征比样本点还多应该怎么办&#xff1f;很显然&#xff0c;此时我们不能再使用上…

【Elsevier出版社】1区智能物联网类SCIEI,审稿友好~

1区智能物联网类SCI&EI 【出版社】Elsevier 【期刊简介】IF&#xff1a;5.5-6.0&#xff0c;JCR1区&#xff0c;中科院3区 【检索情况】SCI&EI 双检&#xff0c;正刊 【参考周期】3个月左右录用 【截稿日期】2023.2.28 【征稿领域】 ①物联网辅助的智能解决方案…

送给SQL开发者的一份新年礼物!麦聪软件发布一款纯Web化SQL开发工具,免安装还免费!

2023年新年伊始&#xff0c;麦聪软件再次迎来一个好消息&#xff1a;一款100%自主研发的纯Web化SQL开发工具——SQL Studio 1.0正式发布。这款产品让SQL开发者在Navicat、DBeaver之外&#xff0c;又多一款值得信赖的SQL开发工具可用。 图片 目前&#xff0c;SQL Studio 1.0面向…

qt读写xml文件(DOM和SAX两种方式)

一、XML简介&#xff1a; XML, 全称为扩展标记语言, 可用来标记数据、定义数据类型&#xff0c;是一种允许用户对自己的标记语言进行定义的源语言。XML非常适合万维网传输&#xff0c;提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据&#xff0c;是Internet环境…

纵向联邦线性回归实现-Federated Machine Learning Concept and Applications论文复现

本实验的算法实现思路来自这篇论文Federated Machine Learning Concept and Applications 文章目录场景介绍同态加密算法python的phe库实现了加法同态加密角色1角色2传统的线性回归纵向联邦线性回归纵向联邦线性回归代码实现导入工具包准备数据使用普通线性回归训练搭建训练过程…

什么神仙操作,用代码能画这样的图

大家好&#xff0c;我是车辙。不知道同学们画流程图或者时序图一般用的什么软件&#xff1f;Visio 还是 Process On 或者语雀&#xff1f; 因为公司原因&#xff0c;在很多情况下&#xff0c;我一般用语雀画流程图或者思维导图。不过凡事也有例外&#xff0c;对于比较简单的图…

你的电路是抄来的还是算出来的?

在你看这篇文章之前&#xff0c;我想提出几点说明&#xff1a; &#xff08;1&#xff09;最近在看拉扎维的书&#xff0c;写下来这些东西&#xff0c;这也只是我个人在学习过程中的一点总结&#xff0c;有什么观点大家可以相互交流&#xff1b;&#xff08;2&#xff09;不断的…