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

操作符(运算符)详解

🚀🚀🚀大家觉不错的话,就恳求大家点点关注,点点小爱心,指点指点🚀🚀🚀

目录

🐰算数操作符:+    -    *    /    %

🐰移位操作符:<<    >>

🌸进制的定义 

🌸整数二进制表示形式

🌸<< 左移操作符

🌸>>右移操作符

🐰位操作符:&   |   ^   

🌸&(按位与)|(按位或) 

 🌸^(按位异或)

🐰赋值操作符:    =

🐰复合赋值符:+=    -=    *=    /=    %=    <<=    >>=    &=    !=    ^=

🐰单目操作符:!    -    +    &    *    ~    --    ++

🐰关系操作符:>    >=    <    <=    !=    ==

🐰逻辑操作符:&&      ||

🐰条件操作符:exp1?exp2:exp3(三目操作符)

🐰逗号表达式:exp1,exp2,exp3,…,expN

🐰下标引用操作符 [ ]

🐰函数调用操作符 ( )

🐰结构成员访问操作符

🐰运算符的优先级顺序表

🐰隐式类型的转换-整形提升


🐰算数操作符:+    -    *    /    %

/:除法——得到的是商。
除法操作符的两个的操作数都是整数的话,执行的是整数除法。
除法操作符的两个的操作数只要一个是浮点数,执行的是小数数除法。
例如:
9/2        就是整数除法
9/2.0或者9.0/2.0        就是小数除法
%:取模(取余)——得到的是余数
‼️注:取模操作符的两个个操作数必须为整数

🐰移位操作符:<<    >>

移位操作符(移动的是二进制的位)<<:左移操作符    >>:右移操作符

🌸进制的定义 

10进制的数据中:都是0~9的数字组成
2进制的数据:0~1的数字组成
8进制的数据:0~7的数字组成
16进制的每一位:0    1    2    3    4    5    6    7    8    9    a    b    c    d    e    f
(2进制,8进制,10进制,16进制只不过是数值的表达形式而已)
例如:数值10
1010    2进制
12        8进制
10        10进制
a           16进制

🌸整数二进制表示形式

整数的二进制表示形式有三种:原码、反码、补码,正数的原、反、补码是相同的,只有负数的原、反、补码需要转换。
转换规则
原码:把一个数按照正负直接翻译成二进制就是原码
反码:原码的符号位不变,其他位按位取反
补码:反码+1
‼️注:原、反、补码的最高位是符号位
例如:5 -5是整数,一个整形变量是4字节32比特位
5
原码:00000000000000000000000000000101
反码:00000000000000000000000000000101
补码:00000000000000000000000000000101
-5
原码:10000000000000000000000000000101
反码:11111111111111111111111111111010
补码:11111111111111111111111111111011

‼️注:整数在内存中存储的是补码

🌸<< 左移操作符

<<左移操作符:左边抛弃,右边补0
例如:
int a=3;
int b=a<<1;
a:00000000000000000000000000000011(补码)
a<<1:00000000000000000000000000000110
b:00000000000000000000000000000110
int a=-3
int b=a<<1;
a:
原码:10000000000000000000000000000011
反码:111111111111111111111111111111111111111100
补码:111111111111111111111111111111111111111101
原码到补码:取反,+1(符号位不变)
补码到原码:-1,取反(符号位不变)和取反,+1(符号位不变)
a:111111111111111111111111111111111111111101
a<<1:111111111111111111111111111111111111111010
b:111111111111111111111111111111111111111010

🌸>>右移操作符

1:>>算术右移(左边用原来的符号位填充,右边丢弃
2:   >>逻辑右移(左边直接用0填充,右边丢弃
右移的时候,到底采用的是算术右移?还是逻辑右移,是取决于编译器的(常见的是算术右移
‼️注:对于移位操作符,不要移动负数位,这个是标准未定义的
例:
Int a=10;
a<<-1(错误)

🐰位操作符:&   |   ^   

位操作符:&(按位与)    |(按位或)   ^(按位异或)   

‼️注:位是二进制位,操作数必须是整数

🌸&(按位与)|(按位或) 

&:相同为相同的数,相异为0

int a=3 b=-5 ;
a:00000000000000000000000000000011    3的补码
b:10000000000000000000000000000101    11111111111111111111111111111010 11111111111111111111111111111011    -5的补码
a&b:00000000000000000000000000000011 

|: 相同为相同的数,相异为1
a|b:11111111111111111111111111111011 
a^b:11111111111111111111111111111000

 🌸^(按位异或)

异或:相同为0,相异为1
规则(异或支持交换律的)
a^a=0
0^a=a
a^a^b=b
a^b^a=b
例题
交换a和b的值,不能用第三个变量
#include<stdio.h>
int main()
{int a=3;int b=5;a=a^b;//000000000011^000000000101=000000000110(6)b=a^b;//000000000110^000000000101=00000000011(3)//b=a^b^b=aa=a^b;//000000000110^00000000011=00000000101(5)//a=a^b^areturn 0;
}

🐰赋值操作符:    =

a=b=c+1;//连续赋值(可读性较低)

🐰复合赋值符:+=    -=    *=    /=    %=    <<=    >>=    &=    !=    ^=

🐰单目操作符:!    -    +    &    *    ~    --    ++

~:按位取反(二进制)
例:
int a=0
a:00000000000000000000000000000000
~a:11111111111111111111111111111111 补码11111111111111111111111111111110 反码10000000000000000000000000000001 原码
~a=-1

‼️注:While(~scanf(“%d”,&a)),scanf读取失败会返回EOF,就是-1,-1按位取反则是0

--:前置:先使用,再--,后置:先使用,再--

++:前置:先使用,再++,后置:先使用,再++

int a=10,b=0;//b=a++;//后置++:先使用,再++,先把a=10值赋给b,然后a再++,a=11,b=10;//b=++a;//前置++:先++,再使用,a先++,a=11,然后把a=11赋值给b,b=11;b=a--;b=--a;

🐰关系操作符:>    >=    <    <=    !=    ==

‼️注:=(赋值操作符)和==(关系操作符)

🐰逻辑操作符:&&      ||

逻辑操作符关注真假(1和0),&&(逻辑与)和||(逻辑或)

例:

int i=0,a=0,b=2,c=3,d=4;i=a++&&++b&&d++;//如果左边为假,后面就不需要算了printf("a=%d b=%d c=%d d=%d i=%d\n",a,b,c,d,i);
结果为:a=1 b=2 c=3 d=4 i=0,因为a++,是后置++,所以此时a值为0,则后后面的不需要计算,就为初始值i=a++||++b||d++;//如果左边为真,后面就不需要算了printf("a=%d b=%d c=%d d=%d i=%d\n",a,b,c,d,i);
结果为:a=1 b=3 c=3 d=4 i=0,因为++b前置++,此时b值不为0,所以后面的d不会进行计算。

🐰条件操作符:exp1?exp2:exp3(三目操作符)

int a=5,b=3,c=0;c=a>b?a:b

🐰逗号表达式:exp1,exp2,exp3,…,expN

例如两数中求最大值
#include<stdio.h>
int main()
{int a=3,b=5;int max=a>b?a:breturn 0;
}

🐰下标引用操作符 [ ]

数组里常用,arr[ ],arr[ i ]...

🐰函数调用操作符 ( )

Int len=strlen(“abc”);Int Add(3,5)//3,5就是( )的操作数

🐰结构成员访问操作符

(1).    结构体变量.结构体成员名

(2)->    结构体指针->结构体成员

struct  S{int num;char c;};void test(struct S* ps ){printf(“%d”,(*ps).num);printf(“%c”,(*ps).c)printf(“%d”,ps->num);//只有结构体指针才能使用->printf(“%c”,ps->.c)}int main(){struct S s={100,’b’};printf(“%d\n”,s.num);printf(“%c\n”,s.c);test(&s)return 0;}

🐰运算符的优先级顺序表

优先级
操作符(运算符)
名称
使用原型
结合规律
注释
  • 1
[ ]
数组下标
数组名[常量表达式]
从左到右
( )
小括号
(表达式)/(强制转换类型)
.
成员选择(对象)
对象.成员名
->
成员选择(指针)
指针->成员名
  • 2
!
逻辑反操作符(逻辑非)
!表达式
从右到左
单目运算符
-
负值
-表达式
+
正值
+表达式
&
取地址运算符
&变量名
*
间接访问操作符(解引用操作符)
*指针变量
~
按位取反操作符
~表达式
--
自减运算符
--变量名/变量名--
++
自加运算符
++变量名/变量名++
sizeof
长度运算符
sizeof(表达式)
(类型)
强制类型转换
(数据类型)表达式
  • 3
/
表达式/表达式
从左到右
双目运算符
*
表达式*表达式
%
取模(取余)
整形表达式%整形表达式
  • 4
+
表达式+表达式
-
表达式-表达式
  • 5
<<
左移
变量<<表达式
>>
右移
变量>>表达式
  • 6
>
大于
表达式>表达式
从左到右
双目运算符
>=
大于等于
表达式>=表达式
<
小于
表达式<表达式
<=
小于等于
表达式<=表达式
  • 7
==
等于
表达式==表达式
!=
不等于
表达式!=表达式
  • 8
&
按位与
表达式&表达式
从左到右
双目运算符
  • 9
^
按位异或
表达式^表达式
  • 10
|
按位或
表达式|表达式
  • 11
&&
逻辑与
表达式&&表达式
  • 12
||
逻辑或
表达式||表达式
  • 13
?:
条件运算符
表达式1?表达式2:表达式3
从右到左
三目运算符
  • 14
=
赋值运算符
变量=表达式
从右到左
/=
除后赋值
变量/=表达式
*=
乘后赋值
变量*=表达式
%=
取模后赋值
变量%=表达式
+=
加后赋值
变量+=表达式
-=
减后赋值
变量-=表达式
<<=
左移后赋值
变量<<=表达式
>>=
右移后赋值
变量>>=表达式
&=
按位与后赋值
变量&=表达式
^=
按位异或后赋值
变量^=表达式
|=
按位或后赋值
变量!+表达式
  • 15
,
逗号运算符
表达式,表达式...
从左到右

‼️注:同一优先级的运算符,顺序由结合规律所决定

🐰隐式类型的转换-整形提升

整形提升是按照变量的数据类型的符号来提升的

(1)负数的整形提升

char c1=-1;

变量c1的二进制位(补码)中只有8个bit位;

11111111

因为char为有符号的char

所以整形提升的时候,高位补充符号位,即为1

提升之后的结果是:

111111111111111111111111111111111

(2)正数的整形提升

char c2=1;

变量是c2的二进制(补码)中只有8个bit位;

00000001

因为char为有符号的char

所以整形提升的时候,高位补充符号位,即为0

提升之后的结果是:

00000000000000000000000000000001

(3)无符号整型提升,高位补0

例题:
 

int main()
{char a=3;//00000000000000000000000000000011-都是补码//000000111-截断char b=127;//00000000000000000000000001111111//01111111-截断char c=a+b;//00000000000000000000000000000011//00000000000000000000000001111111//00000000000000000000000010000010//运算时整形提升//10000010//赋值给c时又发生截断printf("%d\n",c);//10000010//11111111111111111111111110000010-补码//11111111111111111111111110000001-反码//10000000000000000000000001111110-原码//所以打印出的值为10000000000000000000000001111110(二进制),-126(十进制)//%d打印整型提升return 0;
}

​​​​​​​

🌸🌸🌸如果大家还有不懂或者建议都可以发在评论区,我们共同探讨,共同学习,共同进步。谢谢大家! 🌸🌸🌸  

相关文章:

操作符(运算符)详解

&#x1f680;&#x1f680;&#x1f680;大家觉不错的话&#xff0c;就恳求大家点点关注&#xff0c;点点小爱心&#xff0c;指点指点&#x1f680;&#x1f680;&#x1f680; 目录 &#x1f430;算数操作符&#xff1a; - * / % &#x1f430;移位操作符&#x…...

【LeetCode每日一题】【2023/2/9】1797. 设计一个验证系统

文章目录1797. 设计一个验证系统方法1&#xff1a;哈希表代码总体1797. 设计一个验证系统 LeetCode: 1797. 设计一个验证系统 中等\color{#FFB800}{中等}中等 你需要设计一个包含验证码的验证系统。每一次验证中&#xff0c;用户会收到一个新的验证码&#xff0c;这个验证码在…...

计算机图形学:改进的中点BH算法

作者&#xff1a;非妃是公主 专栏&#xff1a;《计算机图形学》 博客地址&#xff1a;https://blog.csdn.net/myf_666 个性签&#xff1a;顺境不惰&#xff0c;逆境不馁&#xff0c;以心制境&#xff0c;万事可成。——曾国藩 文章目录专栏推荐专栏系列文章序一、改进缘由二、…...

【SQL开发实战技巧】系列(六):从执行计划看NOT IN、NOT EXISTS 和 LEFT JOIN效率,记住内外关联条件不要乱放

系列文章目录 【SQL开发实战技巧】系列&#xff08;一&#xff09;:关于SQL不得不说的那些事 【SQL开发实战技巧】系列&#xff08;二&#xff09;&#xff1a;简单单表查询 【SQL开发实战技巧】系列&#xff08;三&#xff09;&#xff1a;SQL排序的那些事 【SQL开发实战技巧…...

十分钟利用环信WebIM-vue3-Demo,打包上线一个即时通讯项目【含音视频通话】

这篇文章无废话&#xff0c;只教你如果接到即时通讯功能需求&#xff0c;十分钟利用环信WebIM-vue3-Demo&#xff0c;打包上线一个即时通讯项目【包含音视频通话功能】。 写这篇文章是因为&#xff0c;结合自身情况&#xff0c;以及所遇到的有同样情况的开发者在接到即时通讯&a…...

pandas——DataFrame基本操作(二)【建议收藏】

pandas——DataFrame基本操作&#xff08;二&#xff09; 文章目录pandas——DataFrame基本操作&#xff08;二&#xff09;一、实验目的二、实验原理三、实验环境四、实验内容五、实验步骤1.修改数据2.缺失值3.合并1.concat合并2.使用append方法合并3.使用merge进行合并4.使用…...

PostgreSQL查询引擎——General Expressions Grammar之restricted expression

General expressions语法规则定义在src/backend/parser/gram.y文件中&#xff0c;其是表达式语法的核心。有两种表达式类型&#xff1a;a_expr是不受限制的类型&#xff0c;b_expr是必须在某些地方使用的子集&#xff0c;以避免移位/减少冲突。例如&#xff0c;我们不能将BETWE…...

从某种程度上来看,产业互联网是一次对于互联网的弥补和修正

如果对当下我们正在经历的这样一个时代进行一次定义的话&#xff0c;我更加愿意将其划归到产业互联网的范畴里。可能有人会说&#xff0c;这与产业互联网并无联系&#xff0c;因为从本质上来看&#xff0c;当下我们所经历的这样一个时代&#xff0c;其实是与互联网并没有太多联…...

【C#Unity题】1.委托和事件在使用上的区别是什么?2.C#中 == 和 Equals 的区别是什么?

1.委托和事件在使用上的区别是什么&#xff1f; 委托和事件是C#中的重要概念&#xff0c;通俗来讲&#xff0c;委托是一个可以指向特定方法的指针&#xff0c;可以将委托分配给不同的脚本&#xff0c;使它们能够完成不同的任务。而事件则是一种使用委托实现的通知机制&#xff…...

FFmpeg5.0源码阅读——内存池AVBufferPool

摘要&#xff1a;FFmpeg中大多数数据存储比如AVFrame,AVPacket都是通过AVBufferRef管理的&#xff0c;而承载数据的结构为AVBuffer。本文主要通过FFmpeg源码来分析下FFmpeg中AVBuffer相关的实现。 关键字&#xff1a;AVBuffer、AVBufferPool、AVBufferPool 1. AVBufferRef 1.…...

Python学习------起步7(字符串的连接、删除、修改、查询与统计、类型判断及字符串字母大小写转换)

目录 前言&#xff1a; 1.字符串的连接 join() 函数 2.字符串的删除&取代 replace()函数 3.字符串的修改&切割 &#xff08;1&#xff09;strip() 函数 &#xff08;2&#xff09;lstrip()函数 和 rstrip()函数 &#xff08;3&#xff09;split()函数-->…...

雪花算法snowflake

snowflake中文的意思是 雪花&#xff0c;雪片&#xff0c;所以翻译成雪花算法。它最早是twitter内部使用的分布式环境下的唯一ID生成算法。在2014年开源。雪花算法产生的背景当然是twitter高并发环境下对唯一ID生成的需求&#xff0c;得益于twitter内部高超的技术&#xff0c;雪…...

Part 4 描述性统计分析(占比 10%)——上

文章目录【后续会持续更新CDA Level I&II备考相关内容&#xff0c;敬请期待】【考试大纲】【考试内容】【备考资料】1、统计基本概念1.1、统计学的含义及应用1.1.1、统计学的含义1.2.1、统计学的应用1.2、统计学的基本概念1.2.1、数据及数据的分类1.2.2、总体和样本1.2.3、…...

Linux系统安全:安全技术和防火墙

目录 一、安全技术 1、安全技术 2、防火墙分类 二、防火墙 1、iptables五表五链 2、黑白名单 3、iptables基本语法 4、iptables选项 5、控制类型 6、隐藏扩展模块 7、显示扩展模块 8、iptables规则保存 9、自定义链使用 一、安全技术 1、安全技术 ①入侵检测系统…...

【干货】Python:turtle库的用法

【干货】Python&#xff1a;turtle库的用法1. turtle库概述2. turtle库与基本绘图2.1 导入库的三种方式2.1.12.1.22.1.32.2 窗体函数2.2 画笔状态函数2.2.1 seed(s)2.2.2 random()2.2.3 randint(a, b)2.2.4 getrandbits(k)2.2.5 randrange(start, stop[ , step])2.2.6 uniform(…...

信息安全与网络安全有什么区别?

生活中我们经常会听到要保障自己的或者企业的信息安全。那到底什么是信息安全呢&#xff1f;信息安全包含哪些内容&#xff1f;与网络安全又有什么区别呢&#xff1f;今天我们就一起来详细了解一下。什么叫做信息安全&#xff1f;信息安全定义如下&#xff1a;为数据处理系统建…...

花了5年时间,用过市面上95%的工具,终于找到这款万能报表工具

经常有粉丝问我有“哪个报表工具好用易上手&#xff1f;”或者是“有哪些适合绝大多数普通职场人的万能报表工具&#xff1f;” 从这里我大概总结出了大家选择报表工具最期望满足的3点&#xff1a; &#xff08;1&#xff09;简单易上手&#xff1a;也就是所谓的学习门槛要低…...

ESP32S3系列--SPI主机驱动详解(一)

一、目的SPI是一种串行同步接口&#xff0c;可用于与外围设备进行通信。ESP32S3自带4个SPI控制器外设&#xff0c;其中SPI0/SPI1内部专用,共用一组信号线,通过一个仲裁器访问外部Flash和PSRAM&#xff1b;SPI2/3各自使用一组信号线&#xff1b;开发者可以使用SPI2/3控制外部SPI…...

2023开工开学火热!远行的人们,把淘特箱包送上顶流

春暖花开&#xff0c;被疫情偷走的三年在今年开学季找补回来了。多个数据反馈&#xff0c;居民消费意愿大幅提升。在淘特上&#xff0c;开工开学节点就很是明显&#xff1a;1月30日以来&#xff0c;淘特箱包品类甚至远超2022年双11&#xff0c;成为开年“第一爆品”。与此同时&…...

Intel x86_64 PMU简介

文章目录前言一、性能监控概述二、CPUID information三、架构性能监控3.1 架构性能监控 Version 13.1.1 架构性能监控 Version 1 Facilities3.1.2 预定义的体系结构性能事件3.1.3 cmask demo测试参考资料前言 Intel 64 和 IA-32 架构提供了 PMU&#xff08;Performance Monito…...

谷歌浏览器插件

项目中有时候会用到插件 sync-cookie-extension1.0.0&#xff1a;开发环境同步测试 cookie 至 localhost&#xff0c;便于本地请求服务携带 cookie 参考地址&#xff1a;https://juejin.cn/post/7139354571712757767 里面有源码下载下来&#xff0c;加在到扩展即可使用FeHelp…...

docker详细操作--未完待续

docker介绍 docker官网: Docker&#xff1a;加速容器应用程序开发 harbor官网&#xff1a;Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台&#xff0c;用于将应用程序及其依赖项&#xff08;如库、运行时环…...

golang循环变量捕获问题​​

在 Go 语言中&#xff0c;当在循环中启动协程&#xff08;goroutine&#xff09;时&#xff0c;如果在协程闭包中直接引用循环变量&#xff0c;可能会遇到一个常见的陷阱 - ​​循环变量捕获问题​​。让我详细解释一下&#xff1a; 问题背景 看这个代码片段&#xff1a; fo…...

逻辑回归:给不确定性划界的分类大师

想象你是一名医生。面对患者的检查报告&#xff08;肿瘤大小、血液指标&#xff09;&#xff0c;你需要做出一个**决定性判断**&#xff1a;恶性还是良性&#xff1f;这种“非黑即白”的抉择&#xff0c;正是**逻辑回归&#xff08;Logistic Regression&#xff09;** 的战场&a…...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡&#xff0c;轻快的音乐在耳边持续回荡&#xff0c;小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下&#xff0c;六一来了。 今天是六一儿童节&#xff0c;小蓝老师为了让大家在节…...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

css3笔记 (1) 自用

outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size&#xff1a;0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格&#xff…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)

Aspose.PDF 限制绕过方案&#xff1a;Java 字节码技术实战分享&#xff08;仅供学习&#xff09; 一、Aspose.PDF 简介二、说明&#xff08;⚠️仅供学习与研究使用&#xff09;三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...

【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看

文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...

解读《网络安全法》最新修订,把握网络安全新趋势

《网络安全法》自2017年施行以来&#xff0c;在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂&#xff0c;网络攻击、数据泄露等事件频发&#xff0c;现行法律已难以完全适应新的风险挑战。 2025年3月28日&#xff0c;国家网信办会同相关部门起草了《网络安全…...