逆向基础--C++ 运算符 (05)

news/2025/11/17 23:28:26/文章来源:https://www.cnblogs.com/MrHSR/p/19208577

逆向基础--C++ 运算符 (05)

一.运算符

  C++的运算符 包括:算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符、其它运算符。

  1.1 算术运算符

    包括:+(加)  -(减)  *(乘)  /(除)  %(取模)  ++(整数值增加1)  --(整数值减少 1)

  1.2 关系运算符

    包括:==(是否相等)  !=(是否相等)  >(大于)  <(小于)  >=(大于等于)  <=(小于等于)

  1.3 逻辑运算符

    包括:&&(逻辑与运算符)  ||(逻辑或运算符)  !(逻辑非运算符)

    重点介绍一下逻辑非运算符:用来逆转操作数的逻辑状态,如果条件为 true 则逻辑非运算符将使其为 false。

    int a = 10;int b = 20;//两边都为true,则条件为 true。输出:trueif (a>0 && b>0) {std::cout << "true";}//两边任意一个为true,则条件为 true。输出:trueif (a > 0 || b > 0) {std::cout << "true";}//里面a <0为false,则条件为true。 输出:trueif ( !(a <0)) {std::cout << "true";}

  1.4 位运算符

    位运算符作用于位,并逐位执行操作

    //按位与(&)操作,两个位都是1时,结果才是1,否则为0unsigned int a = 60;      // 60 = 0011 1100 (二进制) unsigned int b = 13;      // 13 = 0000 1101 (二进制) int c = 0;c = a & b;  // 12 = 0000 1100 /*把a和b的二进制值从右往左,按位比较,最右边是a:0与b:1位与比较, 0&1=0,0&0=0,1&1=1,1&1=1 所以C的右四位是1100a:0 0   1   1   1   1   0   0b:0 0   0   0   1   1   0   1c:0 0   0   0   1   1   0   0    所以值是12*/
    //按位或(|)运算规则:两个位中只要有一个为1,结果就为1,否则为0。unsigned int a = 60;      // 60 = 0011 1100 (二进制) unsigned int b = 13;      // 13 = 0000 1101 (二进制) int c = 0;c = a | b;  // 61 = 0011 1101/*把a和b的二进制值从右往左,按位比较,最右边是a:0与b:1位与比较, 0&1=1,0&0=0,1&1=1,1&1=1 所以C的右四位是1101a:0 0   1   1   1   1   0   0b:0 0   0   0   1   1   0   1c:0 0   1   1   1   1   0   1    所以值是61*/
//-----------------  一个简单的权限判断示例-----------------
[Flags]
public enum UserPermissions
{None = 0,Read = 1,      // 0001Write = 2,     // 0010Execute = 4,   // 0100Delete = 8     // 1000
}// 设置多个权限, permissions二进制:0011
UserPermissions permissions = UserPermissions.Read | UserPermissions.Write;// 检查权限, (permissions & UserPermissions.Read)==(0011 & 0001)==UserPermissions.Read
if ((permissions & UserPermissions.Read) == UserPermissions.Read)
{Console.WriteLine("有读取权限");
}

  1.5 其它运算符

运算符 描述 示例
sizeof sizeof 运算符返回变量的大小

int b = 10;
int byteSize= sizeof(b);
//b变量为4个字节
std::cout << "byteSize:" << byteSize;

 Condition ? X : Y  条件运算符如果, Condition 为真 ? 则值为 X : 否则值为 Y

int a = 10;
int b = 20;
//c为20
int c = a > b ? a : b;

 Cast  强制转换运算符把一种数据类型转换为另一种数据类型

float a = 10.5;
//输出10
int b = int(a);

 &  指针运算符 & 返回变量的地址。

float a = 10.5;
//默认会以十六进制形式输出,并且通常不会带前缀"0x" 输出:000000AFACDFF9F4
//是一个16位的十六进制数,这对应于一个64位系统的内存地址
//32位系统:地址通常是8个十六进制字符。64位系统:地址通常是16个十六进制字符
std::cout << "mem:" << &a;

* 指针运算符 * 指向一个变量。

int number = 42; // 定义一个整型变量
int* ptr = &number; // ptr 指向 number(存储number的地址)

// *ptr = 20; 修改了number的值
std::cout << "变量 number 的值: " << number <<"\n"; // 输出: 42
std::cout << "变量 number 的地址: " << &number << "\n"; // 输出: 0000001F814FF994
std::cout << "指针 ptr 存储的地址: " << ptr << "\n"; // 输出: 与 &number 相同
std::cout << "指针 ptr 指向的值: " << *ptr << "\n"; // 输出: 42

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

团队管理与技术驱动

好的,这两个问题是技术管理者核心价值的集中体现。下面我将结合具体实践,系统性地阐述我的管理理念和方法。团队管理与技术驱动 第一部分:技术选型、规划与三者平衡 我的核心理念是:技术是服务于业务和团队的工具,…

日总结 27

RFID,全称为射频识别,是一种利用无线电波进行非接触式自动识别的技术。 你可以把它想象成一个更先进的“条形码”。但与需要直线对准、一次只能扫描一个的条形码不同,RFID具有以下独特优势:非接触式: 无需看见即…

java linux 中文

您提到的“Java Linux 中文”可能是指在 Linux 系统中运行 Java 应用程序,或者与 Java 相关的 Linux 操作。以下是一些与 Java 和 Linux 相关的常见命令和脚本,帮助您更好地在 Linux 环境中使用 Java:一、Java 环境…

java linux jdk

你提到的“Java Linux JDK”可能是指在 Linux 系统上安装和使用 Java 开发环境(JDK)的相关内容。以下是一些常见的 Java 环境安装和管理方法,适用于大多数 Linux 发行版(如 Ubuntu、CentOS、Debian 等)。一、Java…

Mastercam2021软件界面

时间,滴答滴答在消失

用 Python 和 Tesseract OCR 识别复杂验证码

安装依赖首先,确保已安装所需的工具和库。 安装 Tesseract 在 Windows 上,下载安装包并进行安装:Tesseract GitHub。 在 Linux 上,你可以通过以下命令安装: sudo apt-get install tesseract-ocr 安装 Python 库 使…

用 Go 进行验证码识别

安装 Go 和 Tesseract OCR首先,你需要安装 Go 和 Tesseract。 安装 Go:可以从 Go 官方网站 下载并安装。 安装 Tesseract:可以通过以下命令安装 Tesseract OCR。 对于 Ubuntu: sudo apt install tesseract-ocr 对于…

Spring AI Alibaba 项目源码学习(十)-Interceptor

Interceptor 机制分析 请关注微信公众号:阿呆-bot 概述 本文档分析 Spring AI Alibaba Agent Framework 中的 Interceptor(拦截器)机制,包括 ModelInterceptor 和 ToolInterceptor 的设计、实现原理、链式调用机制…

用 Swift 进行验证码识别

安装 Tesseract OCR首先,你需要通过 CocoaPods 来安装 Tesseract OCR 的 Swift 绑定库。首先在项目的根目录下创建一个 Podfile,并添加以下内容: platform :ios, 11.0 target YourAppName do use_frameworks! pod T…

今日复盘

完成了通过ffmpeg将电脑屏幕转为rtsp推流给mediatx服务器,并供给海康威视录像机拉流的实现:ffmpeg -f gdigrab -framerate 15 -video_size 1280x720 -i desktop -c:v libx264 -preset ultrafast -b:v 1500k -maxrate…

2025.11.16 萌熊

2025.11.16 萌熊打! T1 额,显然先手可以退来保留实力,我直接模拟博弈 发现 \(O(1)\) 的 然后每次算一遍就行了 显然有单调性 但没必要二分 T2 额,一眼,感觉我好像在哪见过 然后直接秒了 就是先扫一遍求出到每个点…

在 parse_model 函数中添加了自定义模块支持

第一段代码(已修改版本)在 parse_model 函数中添加了自定义模块支持:n = n_ = max(round(n * depth), 1) if n > 1 else n # depth gain# Custom modules support - Added for RFAConv, HSFPN, HATHead integra…

20232311 2025-2026-1 《网络与系统攻防技术》实验六实验报告

实验内容发现靶机Metasploitable2并进行端口扫描、版本扫描以及漏洞扫描等等 利用Vsftpd源码包后门漏洞进行攻击 利用SambaMS-RPC Shell命令注入漏洞 利用Java RMI SERVER命令执行漏洞 利用PHP CGI参数执行注入漏洞实验…

线程池的概念

线程池的概念核心线程数: 1.corePoolSize:线程池长期维持的线程数量,即使这些线程处于空闲状态,也不会被销毁,(除非设置了allowCoreThreadTimeOut). 2.maximumPolloSize(最大线程数): 线程池允许创建最大的线程…

android compose viewModel 传参数

android compose viewModel 传参数android compose viewModel 传参数 在MainActivity 里面可以用viewModelsval userDao = db.userDao()val viewModel by viewModels<MyArticleViewModel>(factoryProducer = {ob…

奶牛快传服务调整公告

奶牛快传服务调整公告 尊敬的奶牛快传用户 感谢您长期以来的信任与支持。为了更好地服务创作者,未来我们将专注于 稿定设计 的升级与创新。基于这一战略调整,奶牛快传将于 **2025 年 12 月 8 日 ** 正式停止服务。届…

从零实现 REINFORCE/GRPO —— 大模型推理强化微调实践

一文吃透:不依赖成熟 RL 库,如何实现 REINFORCE、REINFORCE-baseline 与 GRPO;数理推理模型的强化学习微调实践;训练/参考/采样模型的多卡调度。引言 你是否也遇到过:模型“会思考”,但少数题正确,格式还常常不…

java for linux 下载

在 Linux 系统上下载 Java,通常有以下几种常见方式:? 方法一:使用 yum(Debian/Ubuntu)安装 Java sudo apt update sudo apt install openjdk-17-jdkopenjdk-17-jdk 是 Java 17 的 JDK(Java Development Kit)。…

13 个 pytest 宝藏插件推荐!(存存存)

pytest-html 核心:一键生成直观的 HTML 测试报告,便于结果查看与分享。allure-pytest 核心:支持步骤描述、附件、分类等,比pytest-html更高级,让测试结果一目了然。pytest-xdist 核心:支持并行测试,通过将测试用…