| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> 【C语言】操作符还能这样? -> 正文阅读 |
|
[C++知识库]【C语言】操作符还能这样? |
🎬前言大家好,今天给大家带来的是操作符的内容,操作符可能有的人看来是比较简单的,并没有什么重要的内容,很简单,不就是加减乘除嘛,但是实际上呢,背后却有着许多值得我们去学习、去推敲的地方,通过操作符,我们能够学到很多的知识,对于C语言的学习具有很大的意义,希望通过这篇博客,你能够有所收获,能够得到进一步的提升,这才是最主要的!下面让我们来一起看一看把。💖 说到操作符,开始之前,我们先来简单梳理一下内容架构,先了解操作符的类型有哪一些:👇 🚀操作符的分类
📘下面,我们从上往下开始介绍起。 🚀算术操作符
情况1和情况3:浮点数不能用% 情况2:有浮点数就执行浮点数除法 🚀移位操作符移位操作符分为【左移操作符】、【右移操作符】
🚩左移操作符左移操作符比较简单,根据原码反码补码的移位规则:
怎么理解?来,看一小段代码: a<<1: 🚩右移操作符右移操作符相对来说比较难,分为两种移位:
我们基于上面代码来看看右移操作符在编译器中是逻辑位移还是算术位移,先来分析一波: 此时,我们已经知道的补码,如果编译器是算术移位的话,将会打印出-1如果是逻辑移位的话,将会打印出1,结果会是什么呢?让我们来看看: 结果是-1.其实很显然,这才符合实际,说明编译器是算术移位计算的。 这时候,可能有人会问了,那移动负数位呢? ?可以明确的告诉你:对于移位运算符,不要移动负数位,这个是标准未定义的 如:int a = 5; ? a>>-1;//这是错误的 编译都过不了 🚀位操作符我们先来看看位操作有哪些:
这里的位:指的是二进制位,根据原、反、补码进行运算。 这些操作符有什么用呢?我们来应用一下^按位异或:我们通过一个例子来说明? 让我们来看一道题目: 🚩不创建临时变量交换两个整数第一种方法:两数进行相加减,但是可能会出现溢出问题,故此方法在这里不做展示。 第二种方法:这时候位操作符就派上用场了,来看看💨 懵了?别急,先来捋一捋:
举个例子,0^1 = 1 1^1也是同理。 如何理解分配律呢?测试一下就行了: 结果是一样的,与顺序无关。 好了,到了这里,我们在重新看一看刚开始的题目:交换两个数,这时候是不是就更加理解了! 我们在来看另一个题目: 🚩求一个整数存储在内存中的二进制中1的个数🚀赋值操作符比较简单,简单来说,就是可以对变量进行赋值 除此之外,赋值操作符可以连续使用,比如: 不过,可不能这样子赋值,避免出错: 🚀复合赋值符将运算符写成复合的效果 += -= *= /= %= >>= <<= &= |= ^= 比如: 上面两个式子是等价的,其他运算符一样的道理。这样写更加简洁。 🚀单目操作符
下面,直接进入代码进行练习: 关于sizeof我前面的博客就已经有写过了,可以求变量(类型)所占空间的大小 再来练习一道题: 前置++和前置– 后置++和后置– 🚀关系操作符> >= < <= != 用于测试“不相等” == 用于测试“相等 上面几个操作符较为简单,唯一比较容易犯错的地方在于**== 和 =**不小心写错 🚀逻辑操作符
我们要区分逻辑与和按位与 区分逻辑或和按位或
下面,通过一道题目来认识: 分析: 🚀条件操作符
简单来说,条件操作和和ifelse语句一定程度上是可以相互转换的。我们来看个例子 下面转换成条件操作符方式: 🚀逗号表达式什么是逗号表达式?
直接来看代码: 从左到右依次计算,最有一个式子为结果。 好了,基于上面这个例子简单说明了什么是逗号表达式,下面,我们来一起看看下标引用、函数调用和结构成员 🚀下标引用、函数调用和结构成员[ ] 下标引用操作符 其实在数组的时候我们早就遇到过了。这不过这里单独拿了出来:
( ) 函数调用操作符 接受一个或者多个操作数:第一个操作数是函数名,剩余的操作数就是传递给函数的参数。在学习函数相关知识就已经常用了,下面来举个例子: 访问一个结构的成员 两种方式访问:
下面来给大家演示一下这两种方式的使用及其区别: 输出结果是什么?一个是传值调用,另一个是传址调用。 一个没改变,另一个有改变。这是因为第一个形参是实参的临时拷贝,形参的改变影响不了实参。这是反复强调的问题了 🚀拓展:表达式求值
🚩隐式类型转换C的整型算术运算总是至少以缺省整型类型的精度来进行的。 为了获得这个精度,表达式中的字符和短整型操作数在使用之前被转换为普通整型,这种转换称为整型提升。 那整型提升究竟有什么意义呢?
那如何进行整型提升呢? 整型提升是按照变量的数据类型的符号位来提升的 我们来看个例子: 为什么输出结果是c呢? 答:a,b要进行整形提升,但是c不需要整形提升 a,b整形提升之后,变成了负数,所以表达式 a= , b 的结果是假,但是c不发生整形提升,则表达式 c0xb6000000 的结果是真== 在来看一个例子: c只要参与表达式运算,就会发生整形提升,表达式 +c ,就会发生提升,所以 sizeof(+c) 是4个字 节. 表达式 -c 也会发生整形提升,所以 sizeof(-c) 是4个字节,但是 sizeof? ,就是1个字节 🚩 算术转换如果某个操作符的各个操作数属于不同的类型,那么除非其中一个操作数的转换为另一个操作数的类型,否则操作就无法进行。
如果某个操作数的类型在上面这个列表中排名较低,那么首先要转换为另外一个操作数的类型后执行运算。 🚩操作符的属性复杂表达式的求值有三个影响的因素。
两个相邻的操作符先执行哪个?取决于他们的优先级。如果两者的优先级相同,取决于他们的结合性。 ?结语通过上面的介绍,相信你对操作符又有了不一样的理解。同时,本次博客也到了尾声,如果觉得不错的话,记得支持一下!🌹 |
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 19:10:57- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |