操作符详解3

✨✨ 欢迎大家来到莉莉的博文✨✨

 🎈🎈养成好习惯,先赞后看哦~🎈🎈

         前面我们已经讲过算术操作符、赋值操作符、逻辑操作符、条件操作符和部分的单目操作
符,今天继续介绍一部分。

目录

1.操作符的分类

2.移位操作符

2.1左移操作符

 2.2右移操作符

3.位操作符

4.单目操作符

5.逗号表达式

 6.下标访问[]、函数调用()

6.1下标引用操作符 [ ]

 6.2函数调用操作符()


1.操作符的分类

•算术操作符: + 、- 、* 、/ 、%
• 移位操作符: <<  >> 
• 位操作符:  &  |  ^ 
• 赋值操作符: = 、+= 、 -= 、 *= 、 /= 、%= 、<<= 、>>= 、&= 、|= 、^= 
• 单目操作符: !、++、--、&、*、+、-、~ 、sizeof、(类型)
• 关系操作符: > 、>= 、< 、<= 、 == 、 != 
• 逻辑操作符: && 、||
• 条件操作符: ?  :
• 逗号表达式: ,
• 下标引用: []
• 函数调用: ()
• 结构成员访问: . -> 

关系操作符、条件操作符、逻辑操作符:https://blog.csdn.net/wait___wait/article/details/135269329

 结构成员访问操作符:https://blog.csdn.net/wait___wait/article/details/136178916

算术操作符、赋值操作符、单目操作符:C语言之操作符1 

操作符中有一些操作符和二进制及原码、反码、补码有关系。我们先了解二进制和进制转换的知识https://blog.csdn.net/wait___wait/article/details/136137220

原码、反码、补码:https://blog.csdn.net/wait___wait/article/details/136138289

当然清楚的铁铁也可以不用看啦!

2.移位操作符

>>右移操作符

<<左移操作符 

注:移位操作符的操作数只能是整数

警告 :对于移位运算符,不要移动负数位,这个是标准未定义的。
例如:

int num = 10;
num>>-1; //error

2.1左移操作符

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

#include <stdio.h>
int main()
{
    int num = 10;
    int n = num<<1;
    printf("n= %d\n", n);//20
    printf("num= %d\n", num);//10
    return 0;
}

 最终结果为n ==20, num == 10。

如果想要num的值也改变,则可以使用复合赋值 num <<= 1;

从运行结果可以推出:左移一位有乘2的效果。

 2.2右移操作符

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

采用哪种运算规则由编译器决定,常见的编译器采用算术右移

与左移一位类似,右移一位有除2的效果,但也有例外 -1 >> 1的结果还是-1(算术右移)

#include <stdio.h>
int main()
{
    int num = 10;
    int n = num>>1;
    printf("n= %d\n", n);
    printf("num= %d\n", num);
    return 0;
}

3.位操作符

位操作符有: 

  • &  //按位与        两个整数对应的二进制位如果有0,则为0
  • |  //按位或          两个整数对应的二进制位只要有1,则为1
  • ^  //按位异或      两个整数对应二进制位,相同为0,相异为1,异或的结果不会溢出,因为不会进位
  • ~  //按位取反      所有二进制位按位取反(包括符号位)

:他们的操作数必须是整数,操作的是二进制位。

按位异或通常的使用公式:

a ^ a==0

a ^ 0==a

位操作符需要与逻辑操作符进行区分: 

 &&   //逻辑或

 ||      //逻辑与

 !    //逻辑取反 

举例:

#include <stdio.h>
int main()
{
	int num1 = -3;
	int num2 = 5;
	printf("%d\n", num1 & num2);//3
	printf("%d\n", num1 | num2);//-5
	printf("%d\n", num1 ^ num2);//-8
	printf("%d\n", ~0);//-1
	return 0;
}

分析: 

我们知道数据的计算是通过它的补码进行计算的

-3的原码:10000000000000000000000000000011

-3的反码:11111111111111111111111111111100

-3的补码:11111111111111111111111111111101

5的原反补 00000000000000000000000000000101

-3 & 5的补码:00000000000000000000000000000101

由于符号位为0,所以是正数,而正数的原反补相同,因此-3 & 5的结果是3

-3 | 5、-3 ^ 5以此类推,结果为-5、-8

~0的补码:11111111111111111111111111111111­

符号位是1,负数,所得补码的原码:10000000000000000000000000000001—>  -1

        移位操作符和位操作符很重要,总有些题用上它们秒变简单,这里举一些它们的使用场合。

(不能创建临时变量(第三个变量),实现两个数的交换:https://blog.csdn.net/wait___wait/article/details/136143074) 

4.单目操作符

单目操作符有这些:
!、++、--、&、*、+、-、~ 、sizeof、(类型)
单目操作符的特点是只有一个操作数,在单目操作符中只有&和*没有介绍,这2个操作符,我们放在学习指针的时候学习。单目操作符 https://blog.csdn.net/wait___wait/article/details/135242898

5.逗号表达式

exp1, exp2, exp3, …expN  

逗号表达式,就是用逗号隔开的多个表达式,如果表达式的结果要赋值给另一个变量,则在表达式的外面加上括号
逗号表达式,从左向右依次执行。整个表达式的结果是最后一个表达式的结果。

//代码1
int a = 1;
int b = 2;
int c = (a > b, a = b + 10, a, b = a + 1); //逗号表达式
c是多少?//13

//代码2
if (a = b + 1, c = a / 2, d > 0)

//代码3    冗长
a = get_val();
count_val(a);
while (a > 0)
{
	//业务处理
	a = get_val();
	count_val(a);
}
如果使用逗号表达式,代码3可改写成:
while (a = get_val(), count_val(a), a > 0)
{
	//业务处理
}

 6.下标访问[]、函数调用()

6.1下标引用操作符 [ ]

下标引用操作符是一个双目操作符,可能你会很奇怪,明明中括号里面就一个操作数,为什么是双目操作符?那我们现在就先来看看它的操作数到底是哪些。

操作数:一个数组名+一个索引值(索引值就是数组的下标)

int arr[10]; //创建数组
arr[9] = 10; //实用下标引用操作符。
[ ]的两个操作数是arr和9

 6.2函数调用操作符()

接受⼀个或者多个操作数:第⼀个操作数是函数名,剩余的操作数就是传递给函数的参数。

#include <stdio.h>
void test1()
{
	printf("hehe\n");
}
void test2(const char* str)
{
	printf("%s\n", str);
}
int main()
{
	test1(); //这⾥的()就是作为函数调⽤操作符。
	test2("hello bit."); //这⾥的()就是函数调⽤操作符。
	return 0;
}

                        写作不易,您的认同给与我莫大的鼓励!!!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

typescript 类型声明文件

typescript 类型声明文件概述 在今天几乎所有的JavaScript应用都会引入许多第三方库来完成任务需求。这些第三方库不管是否是用TS编写的&#xff0c;最终都要编译成JS代码&#xff0c;才能发布给开发者使用。6我们知道是TS提供了类型&#xff0c;才有了代码提示和类型保护等机…

K8S—集群调度

目录 前言 一 List-Watch 1.1 list-watch概述 1.2 list-watch工作机制 二 集群调度 2.1 调度过程 2.2 Predicate 和 Priorities 的常见算法和优先级选项 2.3 调度方式 三 亲和性 3.1 节点亲和性 3.2 Pod 亲和性 3.3 键值运算关系 3.4 Pod亲和性与反亲和性 3.5 示例…

《高质量的C/C++编程规范》学习

目录 一、编程规范基础知识 1、头文件 2、程序的板式风格 3、命名规则 二、表达式和基本语句 1、运算符的优先级 2、复合表达式 3、if语句 4、循环语句的效率 5、for循环语句 6、switch语句 三、常量 1、#define和const比较 2、常量定义规则 四、函数设计 1、参…

Python及Pycharm专业版下载安装教程(Python 3.11版)附JetBrains学生认证教程

目录 一、Python下载及安装1、Python下载2、Python安装3、验证是否安装成功 二、PyCharm下载及安装1、PyCharm下载2、PyCharm安装3、激活PyCharm 三、JetBrains学生认证 本篇主要介绍Python和PyCharm专业版的下载及安装方式&#xff0c;以及通过两种方式进行JetBrains学生认证。…

Meta AI | 指令回译:如何从大量无标签文档挖掘高质量大模型训练数据?

Meta AI | 指令回译&#xff1a;如何从大量无标签文档挖掘高质量大模型训练数据&#xff1f; 文章来自Meta AI&#xff0c;self-Alignment with Instruction Backtranslation[1]&#xff1a;通过指令反向翻译进行自对准。 一种从互联网大量无标签数据中挖掘高质量的指令遵循数据…

vscode 设置打开中断的默认工作目录/路径

vscode 设置打开终端的默认工作目录/路径** 文章目录 vscode 设置打开终端的默认工作目录/路径**打开vscode&#xff0c;打开设置UI 或是设置JSON文件&#xff0c;找到相关设置项方式1&#xff1a;通过打开settings.json的UI界面 设置:方式2&#xff1a;通过打开设置settings.j…

机器学习基础(六)TensorFlow与PyTorch

导语&#xff1a;上一节我们详细探索了监督与非监督学习的结合使用。&#xff0c;详情可见&#xff1a; 机器学习基础&#xff08;五&#xff09;监督与非监督学习的结合-CSDN博客文章浏览阅读4次。将监督学习和非监督学习结合起来&#xff0c;就像将两种不同的艺术形式融合&a…

[树形DP] 树的最大独立集

题目 这个挺简单的&#xff0c;注意状态转移时&#xff0c;如果选这个点&#xff0c;那么它的子结点状态应该为不选&#xff0c;如果这个点的状态是不选&#xff0c;那么可以在它的子结点里选择&#xff1a;选/不选两个状态&#xff0c;所以最后结果是max挑选。 #include<b…

python自动化管理和zabbix监控网络设备(有线网络配置部分)

目录 一、拓扑图 二、core-sw1 三、core-sw2 四、sum-sw1 五、sum-sw2 一、拓扑图 二、core-sw1 sys sysname core-sw1 vlan batch 10 20 30 40 50 60 100 vlan batch 200 210 220 230 240 250 stp region-configuration region-name huawei revision-level 1 instance…

vue2和vue3 setup beforecreate create生命周期时间比较

创建一个vue程序&#xff0c;vue3可以兼容Vue2的写法&#xff0c;很流畅完全没问题 写了一个vue3组件 <template><div></div> </template><script lang"ts"> import {onMounted} from vue export default{data(){return {}},beforeCr…

深入理解JS的执行上下文、词法作用域和闭包(中)

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

现在学Oracle是49年入国军么?

今天周末&#xff0c;不聊技术&#xff0c;聊聊大家说的最多的一个话题 先说明一下&#xff0c;防止挨喷&#x1f606; 本人并不是职业dba&#xff0c;对数据库就是爱好&#xff0c;偶尔兼职&#xff0c;以下仅个人观点分析&#xff0c;如有不同观点请轻喷&#xff0c;哈哈&…

万字长文带你由浅入深夯实ARM汇编基础——汇编指令及寻址方式最全梳理(附示例)!

《嵌入式工程师自我修养/C语言》系列——由浅入深夯实ARM汇编基础&#xff0c;汇编指令及寻址方式梳理&#xff08;附示例&#xff09;&#xff01; 一、引言二、ARM汇编语言2.1 ARM汇编的特点2.2 ARM指令集格式标准2.2.1 机器指令格式2.2.2 汇编指令格式 三、ARM寻址方式3.1 立…

【Android安全】Windows 环境下载 AOSP 源码

准备环境 安装 git 安装 Python 硬盘剩余容量最好大于 100G 打开 Git Bash&#xff0c;用 git 克隆源代码仓库 git clone https://android.googlesource.com/platform/manifest.git //没有梯子使用清华源 git clone https://aosp.tuna.tsinghua.edu.cn/platform/manifest.git…

174基于matlab的雷达数字信号处理

基于matlab的雷达数字信号处理。该程序具备对雷达目标回波的处理能力&#xff0c;能够从噪声中将目标检测出来&#xff0c;并提取目标的距离、速度、角度信息。有相应的试验文档。程序已调通&#xff0c;可直接运行。 174 雷达数字信号处理 目标检测出来 (xiaohongshu.com)

半导体物理基础-笔记(续)

源内容参考&#xff1a;https://www.bilibili.com/video/BV11U4y1k7zn/?spm_id_from333.337.search-card.all.click&vd_source61654d4a6e8d7941436149dd99026962 掺杂半导体的费米能级与温度及杂质浓度的关系图 在温度一定的条件下&#xff0c;施主杂质浓度越高&#xff0…

字符串(算法竞赛)--字典树Trie与最大异或对

1、B站视频链接&#xff1a;F06 字典树(Trie)_哔哩哔哩_bilibili 题目链接&#xff1a;【模板】字典树 - 洛谷 #include <bits/stdc.h> using namespace std; const int N100010; int n; char s[N]; int ch[N][26];//ch[0][2]1表示0号节点通过c边走到了节点1 int cnt[…

Java语言实现学生管理系统

目录 题目 代码展示 学生类 方法类 main类 运行展示​编辑 题目 学生管理 设计一个学生信息管理系统,有添加学生,查询学生,删除学生等功能. 要求:1.设计一个类学生类,学生属性有学号,姓名,性别(属性私有权限) 用来存储学生的信息 要求2:实现对学生信息的增删查操作 要求…

API攻防-接口安全SOAPOpenAPIRESTful分类特征导入项目联动检测

知识点 1、API分类特征-SOAP&OpenAPI&RESTful 2、API检测项目-Postman&APIKit&XRAY 部分项目下载&#xff1a; https://github.com/API-Security/APIKit https://github.com/lijiejie/swagger-exp https://github.com/jayus0821/swagger-hack 靶场和资源总结&…

限流算法

下面对常见的限流算法进行讨论。目前&#xff0c;常用的限流算法主要有三种&#xff1a;计数器法、滑动窗口算法、漏桶算法和令牌桶算法。下面分别介绍其原理。 1. 计数器法 计数器法是通过计数对到来的请求进行选择性处理。如系统限制一秒内最多有X个请求&#xff0c;则在该…