当前位置: 首页 > news >正文

操作符详解

目录

操作符分类

算术操作符

+

-

*

/

二进制

二进制总结

移位操作符(操作数只能为整数)

<< 

>> 

位操作符(操作数必须为整数)

&

|

^

面试题

赋值操作符

=

复合赋值符

单目操作符

单目操作符介绍

sizeof与数组

关系操作符

逻辑操作符

面试题

条件表达式

 逗号表达式

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

[ ]    下标引用操作符

( )函数调用操作符

访问结构成员(.  ->)

表达式求值

隐式类型转换

如何进行整型提升

算术转换

操作符的属性

 总结:我们写出的表达式如果不能通过操作符的属性确定唯一的计算路径,那么这个表达式就是存在问题的


操作符分类

算术操作符    + - * / %

移位操作符    <<   >>

位操作符       & ^ |

赋值操作符   =   +=   -=   *=   /=   <<=   >>=

单目操作符    ! sizeof  +  -  &  *

关系操作符    &&    ||

条件操作符(三目操作符)   ? :

逗号表达式     ,

下标引用,函数调用和结构成员    [ ]   ( )  .   ->

算术操作符

+

 a+b

-

a-b

*

a*b

/

a/b    除数不能为0

1.整数除法:符号两端是整数

2.小数除法:两个操作数只要有一个操作数是小数就执行小数除法

a%b 得到的是整除之后的余数

%操作符的两端必须为整数

二进制

数据在内存中存储用的是是二进制,我们用整数举例,int类型的数据是4个字节,32个bit位

最高位为符号位,0为正,1为负

如   5

它的二进制原码,反码,补码都相同

00000000 00000000 00000000 00000101

-5

原码

10000000 00000000 00000000 00000101

反码(负数的反码是在其原码的基础上,符号位不变,其余各个位取反

111111111 111111111 111111111 111111010

补码(反码+1)

111111111 111111111 111111111 111111011

二进制总结

最高位为符号位,正数为0,负数为1

1.正数

原码,反码,补码相同

2.负数

原码

反码:负数的反码是在其原码的基础上,符号位不变,其余各个位取反

补码:反码+1

整数在计算机中存储的是补码,计算的时候也用的是补码

移位操作符(操作数只能为整数)

<< 

左移操作符(左边抛弃,右边补0)

5<<1

5的补码为

00000000 00000000 00000000 00000101

左移之后

00000000 00000000 00000000 00001010      10

>> 

右移操作符

一般采用算术右移

1.算术右移:右边抛弃,左边补原来的符号位

2.逻辑右移:右边抛弃,左边补0

 如   5 

5的补码

00000000 00000000 00000000 00000101

5>>1的补码

00000000 00000000 00000000 00000010     2

对于移位操作符,不要移动负数位 

位操作符(操作数必须为整数)

&

按位与(对应二进制位有0则为0,两个同时为1,才为1)

如5&3

5的补码

00000000 00000000 00000000 00000101

3的补码

00000000 00000000 00000000 00000011

5&3的补码

00000000 00000000 00000000 00000001      1

|

按位或(对应二进制位有1则为1,同时为0才为0)

如5|3

5的补码

00000000 00000000 00000000 00000101

3的补码

00000000 00000000 00000000 00000011

5&3的补码

00000000 00000000 00000000 00000111   7

^

按位异或(对应二进制位相同为0,相异为1)

如 5^3

5的补码

00000000 00000000 00000000 00000101

3的补码

00000000 00000000 00000000 00000011

5^3的补码

00000000 00000000 00000000 00000110    6

 

面试题

在不能创建第三个变量的情况下,实现两个数的交换

1.加减法

缺陷:当两个数足够大的时候定义的类型就存放不下两者相加的结果】

2.按位取反法

两个数相同异或为0:a^a=0

一个数与0异或为本身a^0=a

 

赋值操作符

=

赋值操作符,可以給变量重新赋值

int weight=100;//不满意

weight=90;//重新赋值

复合赋值符

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

int x=10;

x=x+10;      ==      x+=10;

单目操作符

单目操作符介绍

!     逻辑反操作

例    if(x!=7)

-    负值

+   正值

&  取地址

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

~    对一个数的二进制位取反(0变1,1变0)

--   前置,后置--

++  前置,后置++

*     间接引用操作符(解引用操作符)

例    int *(类型)pa(指针变量)=&a;

      *  pa 这里的*就是解引用操作符,通过pa中存放的地址找到指向的空间(内容),这里找到a

(类型)   强制类型转换

sizeof与数组

sizeof(arr),整个数组的长度

sizeof(arr[0])数组中第一个元素的长度

test(arr)

void test(int arr[ ])

sizeof(arr)这里的arr是一个指针,求出来的长度为4/8

关系操作符

>    >=    <   <=  ==   !=

逻辑操作符

&&   逻辑与   左边为0(假),结束,右边不计算

||      逻辑或   左边为1(真),结束,右边不计算

例如    判断闰年

if((year%4==0&&year%100!=0) || year%400==0)

面试题

 求程序的输出结果

0 2 3 4

因为a++为0,&&左边为0,就结束,不计算后面

1 3 3 4

因a++为0,||继续计算,++b为3为真,停止不计算后面

条件表达式

exp1 ? exp2 : exp3

真       计算    不计算

假       不计算    计算

例如

(a>5)? b=3 : b=2

如果a>5,那么b=3

如果a<=5,那么b=2

 逗号表达式

exp1  ,exp2 , exp3  , exp4 ,……

逗号表达式就是用逗号隔开的多个表达式

逗号表达式从左到右依次执行,整个表达式的结果就是最后一个表达式的结果

int  a=1;

int b=2;

int c=(a>b,a=b+10,a,b=a+1)

求c

依次计算最后一个表达式为13

c=13

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

[ ]    下标引用操作符

一个数组名+一个索引值

int arr[10];

arr[9]=10;

[ ]的两个操作数为arr 和  9

( )函数调用操作符

接受一个或多个操作数,第一个操作数为函数名,剩下的操作数为传递给函数的参数

test (arr ,i, k);

printf("%d",a);

int main()

访问结构成员(.  ->)

.  结构体.成员名   结构体变量

->  结构体->成员名   结构体指针

表达式求值

隐式类型转换

C语言的整型算术运算总是至少以缺省整型类型的精度来计算

为了获得这个精度,表达式中的字符和短整型操作数在使用前转换为普通整型,这种转换成为整型提升

例如

char a,b,c;

c=a+b;

a和b的值被提升为整型,再进行加法运算,加法运算完成后再截断存放在a中

如何进行整型提升

负数  高位补充符号位,即为1

正数   高位补充符号位,即为0

无符号整型提升,高位补充0

整型提升只针对于小于int的整型,只要参与表达式运算,就会发生整型提升

算术转换

如果某个操作符的各个操作数属于不同的类型,那么除非其中一个操作数转换为另一个操作数的·类型,否则计算无法进行

排名较低的转换为另一个类型进行计算

long double

double

float

unsigned long int 

long int 

unsigned int 

int

操作符的属性

复杂表达式求值有三个影响因素

1.操作符的优先级

2.操作符的结合性

3.是否控制求值顺序

 总结:我们写出的表达式如果不能通过操作符的属性确定唯一的计算路径,那么这个表达式就是存在问题的

相关文章:

操作符详解

目录 操作符分类 算术操作符 - * / % 二进制 二进制总结 移位操作符&#xff08;操作数只能为整数&#xff09; << >> 位操作符&#xff08;操作数必须为整数&#xff09; & | ^ 面试题 赋值操作符 复合赋值符 单目操作符 单目操作符介绍…...

【MATLAB图像处理实用案例详解(16)】——利用概念神经网络实现手写体数字识别

目录 一、问题描述二、概念神经网络实现手写体数字识别原理三、算法步骤3.1 数据输入3.2 特征提取3.3 模型训练3.4 测试 四、运行结果 一、问题描述 手写体数字属于光学字符识别&#xff08;Optical Character Recognition&#xff0c;OCR&#xff09;的范畴&#xff0c;但分类…...

数据库管理-第六十九期 另一种累(20230422)

数据库管理 2023-04-22 第六十九期 另一种累1 国产数据库沟通2 问题3 我的建议总结 第六十九期 另一种累 Oracle 23c的相关内容先缓缓&#xff0c;有些数据库管理相关的还是得正式版发布后才好去做实验。这周相较于之前那种割接较多的累还有点不一样&#xff0c;这周陪着客户交…...

Cesium入门之六:Cesium加载影像图层(ArcGIS、Bing、Mapbox、高德地图、腾讯地图、天地图等各类影像图)

Cesium加载影像图层 一、ImageryLayer类常用属性常用方法 二、ImageryLayerCollection类常用属性常用方法 三、ImageryProvider类常用属性常用方法 四、ImageryProvider子类1. ArcGisMapServerImageryProvider加载ArcGIS地图服务 2. BingMapsImageryProvider加载BingMap地图服务…...

Redis系列--redis持久化

一、为什么需要持久化 redis本身运行时数据保存在内存中&#xff0c;如果不进行持久化&#xff0c;那么在redis出现非正常原因宕机或者关闭redis的进程或者关闭计算机后数据肯定被会操作系统从内存中清掉。当然&#xff0c;redis本身默认采用了一种持久化方式&#xff0c;即RD…...

在外Windows远程连接MongoDB数据库【无公网IP】

文章目录 前言1. 安装数据库2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射2.3 测试随机公网地址远程连接 3. 配置固定TCP端口地址3.1 保留一个固定的公网TCP端口地址3.2 配置固定公网TCP端口地址3.3 测试固定地址公网远程访问 转载自远程内网穿透的文章&#xff1a;公网远…...

学网络安全怎么挖漏洞?怎么渗透?

前言 有不少阅读过我文章的伙伴都知道&#xff0c;我从事网络安全行业已经好几年&#xff0c;积累了丰富的经验和技能。在这段时间里&#xff0c;我参与了多个实际项目的规划和实施&#xff0c;成功防范了各种网络攻击和漏洞利用&#xff0c;提高了安全防护水平。 也有很多小…...

KL散度和交叉熵的对比介绍

KL散度&#xff08;Kullback-Leibler Divergence&#xff09;和交叉熵&#xff08;Cross Entropy&#xff09;是在机器学习中广泛使用的概念。这两者都用于比较两个概率分布之间的相似性&#xff0c;但在一些方面&#xff0c;它们也有所不同。本文将对KL散度和交叉熵的详细解释…...

浪涌保护器:保护电子设备免受雷击侵害

引言&#xff1a; 随着电子设备在现代生活和工业领域的普及和广泛应用&#xff0c;雷击对电子设备的损害成为一个严重的问题。浪涌保护器作为一种重要的防雷设备&#xff0c;发挥着至关重要的作用。本文将介绍浪涌保护器的防雷作用、行业应用&#xff0c;并重点介绍浪涌保护器…...

js绘制的红心

看腻歪了粒子特效的红心&#xff0c;今天给各位整个线条的&#xff0c;效果图如下&#xff1a; 表白显圣神器&#xff0c;你值得拥有&#xff0c;代码如下&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"…...

十、Feign客户端

目录 1、在springcloud-order项目中引入Feign客户端的依赖 2、在server-order服务的启动类中添加注解EnableFeignClients 3、使用FeignClient注解声明Feign客户端需要调用的远程接口 3.1、server-pay服务提供远程接口Controller 3.2、server-member服务提供远程接口Contro…...

登录appuploader

转载&#xff1a;登录appuploader 常规使用登录方法 双击appuploader.exe 启动appuploader 点击底部的未登录&#xff0c;弹出登录框 在登录框内输入apple开发者账号 如果没有apple开发者账号&#xff0c;只是普通的apple账号&#xff0c;请勾选上未支付688 然后软件会提示…...

都别吹牛逼了,2个英语指令简单评测便知ChatGPT、博弈Ai、文心一言、通义千问、讯飞星火真实水平

一、博弈Ai&#xff1a;GPT3.5版 演示&#xff1a;https://chat.bo-e.com/ 1、充当英语发言助手 评分&#xff1a;10分 总结&#xff1a;完整满足了指令需求 2、充当英汉互译器 评分&#xff1a;8分 总结&#xff1a;基本满足了我的指令需求。但是有点啰嗦&#xff0c;扣…...

使用Spring Boot快速搭建项目:减少配置,提升开发效率

使用Spring Boot快速搭建项目&#xff1a;减少配置&#xff0c;提升开发效率 一、Spring Boot简介1 Spring Boot的起源2 Spring Boot的核心特点3 Spring Boot的优势 二、Spring Boot快速搭建项目1 Spring Boot的项目搭建方式使用Spring Initializr创建项目使用Spring Boot CLI创…...

(2)数码管

LED数码管:数码管是一种简单、廉价的显示器&#xff0c;是由多个发光二极管封装在一起组成"8"字器件 51单片机是共阴极连接 74HC245这个芯片有什么作用呢&#xff1f;解&#xff1a;这个芯片被称之为双向数据缓冲器这个芯片的作用&#xff0c;用来进行数据缓冲(提高驱…...

赫夫曼树和赫夫曼编码详解

目录 何为赫夫曼树&#xff1f; 赫夫曼树算法 赫夫曼编码 编程实现赫夫曼树 编程实现赫夫曼编码 编程实现WPL 总代码及分析 何为赫夫曼树&#xff1f; 树的路径长度&#xff1a;从树根到每一结点的路径长度之和 结点的带权路径长度&#xff1a;从树根到该结点的路径长度…...

unity UGUI系统梳理 -交互组件

概述 unity 中的交互组件可用于处理交互&#xff0c;例如鼠标或触摸事件以及使用键盘或控制器进行的交互 1、按钮 (Button) Button详解 2、开关 (Toggle) Background&#xff1a;背景图片&#xff0c;控制toggle组件的背景颜色改变&#xff0c;从而展示此物体是否被选中的…...

HTTP第15讲——HTTP的连接管理

短连接 HTTP 协议最初&#xff08;0.9/1.0&#xff09;是个非常简单的协议&#xff0c;通信过程也采用了简单的“请求 - 应答”方式。 它底层的数据传输基于 TCP/IP&#xff0c;每次发送请求前需要先与服务器建立连接&#xff0c;收到响应报文后会立即关闭连接。 因为客户端与…...

深度剖析Mybatis-plus Injector SQL注入器

背景 在项目中需要同时操作Sql Server 以及 MySQL 数据库&#xff0c;可能平时直接使用 BaseMapper中提供的方法习惯 了&#xff0c;不用的话总感觉影响开发效率&#xff0c;但是两个数据库的SQL语法稍微有点差别&#xff0c;有些暴露的方法并不能直接使用&#xff0c;所以便想…...

【Mysql实战】使用存储过程和计算同比环比

背景 同环比&#xff0c;是基本的数据分析方法。在各类调研表中屡见不鲜&#xff0c;如果人工向前追溯统计数据&#xff0c;可想而知工作量是非常大的。 标题复制10行&#xff0c;并且每行大于10个字符【源码解析】SpringBoot接口参数【Mysql实战】使用存储过程和计算同比环比…...

Linux链表操作全解析

Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表&#xff1f;1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了&#xff1a;一行…...

Qt Http Server模块功能及架构

Qt Http Server 是 Qt 6.0 中引入的一个新模块&#xff0c;它提供了一个轻量级的 HTTP 服务器实现&#xff0c;主要用于构建基于 HTTP 的应用程序和服务。 功能介绍&#xff1a; 主要功能 HTTP服务器功能&#xff1a; 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

【Oracle】分区表

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

Springboot社区养老保险系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;社区养老保险系统小程序被用户普遍使用&#xff0c;为方…...

LeetCode - 199. 二叉树的右视图

题目 199. 二叉树的右视图 - 力扣&#xff08;LeetCode&#xff09; 思路 右视图是指从树的右侧看&#xff0c;对于每一层&#xff0c;只能看到该层最右边的节点。实现思路是&#xff1a; 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...

使用LangGraph和LangSmith构建多智能体人工智能系统

现在&#xff0c;通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战&#xff0c;比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...

jmeter聚合报告中参数详解

sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample&#xff08;样本数&#xff09; 表示测试中发送的请求数量&#xff0c;即测试执行了多少次请求。 单位&#xff0c;以个或者次数表示。 示例&#xff1a;…...

基于Java+VUE+MariaDB实现(Web)仿小米商城

仿小米商城 环境安装 nodejs maven JDK11 运行 mvn clean install -DskipTestscd adminmvn spring-boot:runcd ../webmvn spring-boot:runcd ../xiaomi-store-admin-vuenpm installnpm run servecd ../xiaomi-store-vuenpm installnpm run serve 注意&#xff1a;运行前…...

PostgreSQL——环境搭建

一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在&#xff0…...