• C++篇为本人学C++时所做笔记(特别是疑难杂点),全是硬货,虽然看着枯燥但会让你收益颇丰,可用作学习C++的一大利器

二、运算符

(一)运算符本身运用限制

  1. %取余运算符要求运算数必须是整型,浮点数取余用fmod(x,y),若不符则会发生编译错误

  2. 加加运算符并不会提高运行时效率,反而会降低,只是为了代码更精简

  3. 按位运算是对字节或字中的实际位进行检测、设置或移位, 它只适用于字符型和整数型变量以及它们的变体, 对其它数据类型不适用

  4. 在一个式子中如果有两个以上同一优先级的运算符,其运算次序是按运算符的结合性(自右向左和自左向右)来处理

5.不能用于浮点数的运算符:

① 求余数% 和%=

② 下标[]

③ 所有的位运算符:& | ^ ~ << >>,还有&= | = ^= <<= >>=

  1. 在判断两个浮点数 a 和 b 是否相等时,不要用 a==b,应该判断二者之差的绝对值fabs(a-b) 是否小于某个阈值,例如 1e-9

(二)运算符运用

  1. 三目运算符从右到左运算

  2. (3,2,1,0) 可作为C++合法表达式,这是一个逗号表达式

  3. sizeof(double) 是一个整型表达式 // sizeof是运算符,不是函数,sizeof的结果是无符号整数,可以把它看作是无符号整型表达式

  4. sizeof是运算符,在编译时即计算好了,在头文件中typedef为unsigned int,参数可以是数组、指针、类型、对象、函数等

  5. strlen是函数,要在运行时才能计算。参数必须是字符型指针。当数组名作为参数传入时,实际上数组就退化成指针了

  6. a与0xf(十进制即15)做异或操作,可以实现低四位的翻转。

  7. 如果是| 按位或 ,则将低四位数全变成1.

    如果是& 按位与,则结果不变。

  8. (3++)++4 = 35 = 15 // 3++返回的是3

  9. 运算符“>>”执行算术右移,每移一位,第一个操作数被2除一次;按二进制形式把所有的数字向右移动对应位移位数,低位移出(舍弃),高位的空位补符号位,即正数补零,负数补1。

​ 运算符“<<”执行算术左移,在数字没有溢出的前提下,对于正数和负数,左移一位都 相当于乘以2的1次方,左移n位就相当于乘以2的n次方;按二进制形式把所有的数 字向左移动对应的位数,高位移出(舍弃),低位的空位补零

​ 逻辑右移或叫无符号右移运算符“>>>“只对位进行操作,没有算术含义,它用0填充 左侧的空位。

​ 算术右移不改变原数的符号,而逻辑右移不能保证这点。

  1. 移位运算符约简其右侧的操作数,当左侧操作数是int类型时,右侧以32取模;当左侧是long类型时,右侧以64取模

  2. Int i=1,~i=-2 //C++中非表示为!

因为假设int占2个字节,那么1的二进制表示是 0000 0001 ,~表示按位取反,则 0000 0001变为 1111 1110(为负数),在计算机中整数用补码形式表示,正数的补码是它 本身,负数的补码是原数值除符号位按位取反再加一,由补码求原数值也是按位取反再 加一,那么 1111 1110 除符号位按位取反再加一变成 1000 0010,即 -2(取反后若为 负数则还要按位取反再加一求出原数值)

  1. 1+1=1 // 为二进制的逻辑运算,真且真=真(故1/1、1-1、1+1=10都不是逻辑运算)

  2. C++支持连等的情况只有变量在前面已定义的背景下才支持,故int a = b = 7; //错误,因为只是定义了a,没定义b(结合笔记的赋值表达式)

  3. 逻辑表达式的返回值是0,1

  4. x&(x-1)统计1的个数,x|(x+1)统计0的个数

  5. 因为i++在计算时,会用到中间变量存储,会占用更多的内存和时间。所以++i更好

(三)运算符重载

1.运算符重载的规则:

① 只能重载已有的且被允许重载的运算符。

② 重载之后,运算符的优先级和结合性不会改变,也不能够改变。

③ 重载的功能应当与原有功能相类似,不能改变原运算符的操作对象个数,同时重载运算符必须具有一个类对象(或类对象的引用)的参数

④ 运算符重载函数不能使用默认参数

⑤ 成员运算符“.”、指针运算符“*”、作用域运算符“::”、“sizeof”、三目条件运算符“?:”不能重载

⑥ 赋值运算符“=”,下标运算符“[]”,函数调用运算符“()”,成员运算符“->”必须作为成员函数重载

⑦ 流插入和流提取运算符,类型转换运算符函数只能作为友元函数

⑧ 在自增自减运算符重载函数中,增加一个int型形参,就是后置了

  1. operator写在返回类型后运算符号前,故运算符函数的函数名就是“operator运算符号”

  2. 一般运算结果作为左值则返回引用类型,作为右值则返回对象

  3. 如果运算符左侧的操作数属于C++标准类型或是一个其他类的对象(非本类时),则运算符重载函数只能作为非成员函数

​ 5.运算符重载为类的成员函数:

① 运算符函数的形式参数个数比运算符规定的运算对象个数要少一个

② 双目运算符重载为类的成员函数形参个数为1个(const 所属类型 &obj)

③ 前置单目运算符重载为类的成员函数形参个数为0

④ 后置单目运算符重载为类的成员函数形参个数为1(如int)

⑤ 当运算符重载为友元函数时,运算符函数的形参个数和运算符规定的运算对象个数一致

(1) 双目形参为(const 所属类型 &obj1,const 所属类型 &obj2)

(2) 前置单目形参为(const 所属类型 &obj)

(3) 后置单目形参为(const 所属类型 &obj,int)

6. 典型运算符的重载:

① 复合的赋值运算符重载:因为具有“给运算对象重新赋值”的功能,运算符函数需要返回引用类型

② 重载流运算符:运算符函数返回流对象的引用类型,且流插入和提取重载函数不能是类的成员函数

③ 重载类型转换运算符(将类类型显示的转换为其他数据类型):只能作为类的成员函数

C++篇:第二章_运算符_知识点大全的更多相关文章

  1. Java语言程序设计(基础篇)第二章

    第二章 基本程序设计 2.2 编写简单的程序 1.变量名尽量选择描述性的名字(descriptive name). 2.实数(即带小数点的数字)在计算机中使用一种浮点的方法来表示.因此,实数也称为浮点 ...

  2. 从零开始的程序逆向之路基础篇 第二章——用OllyDbg(OD)分析一个简单的软件

    作者:Crazyman_Army 原文来自:https://bbs.ichunqiu.com/thread-43469-1-1.html 0x00知识回顾 (由于笔者省事,没开XP虚拟机,而且没关闭A ...

  3. Java编程基础篇第二章

    关键字 概述:被Java语言赋予特定含义的单词. 特点:组成关键字的字母全部为小写字母. 标识符 概述:给类,接口,包,方法,常量起名字时的字符序列 组成规则:英文大小写字母,数字,$和— 命名规则. ...

  4. 嵌入式学习笔记(综合提高篇 第二章) -- FreeRTOS的移植和应用

    1.1    资料准备和分析 上章节通过实现双机通讯,了解如何设计和实现自定义协议,不过对于嵌入式系统来说,当然不仅仅包含协议,还有其它很多需要深入学习了解的知识,下面将列出我在工作和学习上遇到的嵌入 ...

  5. 明解C语言 入门篇 第二章答案

    练习2-1 #include <stdio.h> int main() { int x; int y; int percent; puts("请输入两个整数"); pr ...

  6. 网络安全-主动信息收集篇第二章SNMP扫描

    SNMP扫描: snmp在中大型企业中可以用来做网络管理和网络监控的使用,当开启了snmp简单网络管理后,那么客户机就可以通过这个协议向该设备发送snmp协议内容可以轻松查询到目标主机的相关信息. 以 ...

  7. 网络安全-主动信息收集篇第二章-三层网络发现之nmap和fping和Hping

    nmap IP  -sn nmap当目标IP在同一网段时,nmap会发送ARP包,当目标IP不在同一网段时nmap会发送ICMP的包. fping IP fping  -g 参数支持对IP地址起始和结 ...

  8. 网络安全-主动信息收集篇第二章-三层网络发现之ping

    第三层网络扫描基于TCP/IP.ICMP协议. 优点:可路由.速度比较快 缺点:相对于二层网络扫描较慢,容易被边界防火墙过滤 所有扫描发现技术,都会有相应的对抗办法,所以无论是来自二层的网络扫描还是来 ...

  9. 网络安全-主动信息收集篇第二章-二层网络扫描之scapy

    scapy是python第三方库文件,可以使用python进行调用也单独进行使用. 非常强大可以用于抓包.分析.创建.修改.注入网络流量. 使用scapy 详细使用方式可以查看github:https ...

  10. 网络安全-主动信息收集篇第二章-二层网络扫描之Netdiscover

    专用于二层发现 可用于无限和交换网络环境 主动和被动探测 主动模式:netdiscover –i 网卡名 –r IP/网络位  /   netdiscover –l IPList.txt 被动 net ...

随机推荐

  1. Go接口 - 构建可扩展Go应用

    本文深入探讨了Go语言中接口的概念和实际应用场景.从基础知识如接口的定义和实现,到更复杂的实战应用如解耦与抽象.多态.错误处理.插件架构以及资源管理,文章通过丰富的代码示例和详细的解释,展示了Go接口 ...

  2. go 流程控制之switch 语句介绍

    go 流程控制之switch 语句介绍 目录 go 流程控制之switch 语句介绍 一.switch语句介绍 1.1 认识 switch 语句 1.2 基本语法 二.Go语言switch语句中cas ...

  3. Web SSH 的原理与在 ASP.NET Core SignalR 中的实现

    前言 有个项目,需要在前端有个管理终端可以 SSH 到主控机的终端,如果不考虑用户使用 vim 等需要在控制台内现实界面的软件的话,其实使用 Process 类型去启动相应程序就够了.而这次的需求则需 ...

  4. golang在win10安装、环境配置 和 goland开发工具golang配置 及Terminal的git配置

    前言 本人在使用goland软件开发go时,对于goland软件配置网上资料少,为了方便自己遗忘.也为了希望和我一样的小白能够更好的使用,所以就写下这篇博客,废话不多说开搞. 一.查看自己电脑系统版本 ...

  5. [Python急救站课程]整数数列求和

    整数数列求和程序: n = input("请输入整数N: ") sum = 0 for i in range(int(n)): # range用于计数整数.for表示循环 sum ...

  6. Util应用框架基础(五) - 异常处理

    本节介绍Util应用框架如何处理系统错误. 概述 系统在运行过程中可能发生错误. 系统错误可以简单分为两类: 系统异常 系统本身出现的错误. 业务异常 不满足业务规则出现的错误. 如何处理系统异常 如 ...

  7. EasyRE

    注意 操作等级 亦或的操作优先级比减号低 C++运算符优先级_c++运算符的优先级顺序-CSDN博客 转换 还有注意一般都是小端存放,所以这里要逆序输出

  8. 用强数据类型保护你的表单数据-基于antd表单的类型约束

    概述 接口数据类型与表单提交数据类型,在大多数情况下,大部分属性的类型是相同的,但很少能做到完全统一. 我在之前的工作中经常为了方便,直接将接口数据类型复用为表单内数据类型,在遇到属性类型不一致的情况 ...

  9. goto关键词

    1.前言 goto,一个蒟蒻一用就废,大佬一用就吊炸天的神奇关键字. 今天,我要来盘它!!! 2.goto只能在函数内实现跳转,不能跨函数跳转 因为标号label是局部有效的. #include &l ...

  10. 关于Delphi

    # 关于Delphi ··Delphi中使用的面向对象pascal编程语言. ··Pascal语言最初由瑞士苏黎士理工学院的尼古拉斯-沃斯(Niklaus Wirth)教授在1971年设计. ··19 ...