C++入门基础:C++中的常用操作符练习

开头介绍下C++语言先,C++是一种广泛使用的计算机程序设计语言,起源于20世纪80年代,由比雅尼·斯特劳斯特鲁普在贝尔实验室开发。它是C语言的扩展,增加了面向对象编程的特性。C++的应用场景广泛,包括系统软件、游戏开发、嵌入式系统、高性能计算、网络编程和图形界面应用程序等。其语言特点主要体现在高效性、可移植性、面向对象编程、模板编程以及丰富的标准库,与C语言相比,C++继承了C语言的优点并进行了扩充和完善,C++属于C语言的超集,加入了更多的编程范式和表达能力,但两者也存在一定的差异。

Hello World

这里先上一个最基础的编译和运行案例,在终端输出"Hello World",具体代码如下:

#include <iostream>int main() {std::cout << "Hello, World!" << std::endl;return 0;
}
    1. 导入标准输入输出流库#include <iostream>
      这一行是预处理指令,告诉编译器导入包含标准输入输出流库(iostream)。这个库可以使用输入输出功能,打印文本到屏幕。
    1. 定义主函数int main()
      这是主函数的开始,C++程序从这里开始执行。int 表示这个函数返回一个整数值,这是与操作系统的约定。在{}大括号内是主函数的体,也就是程序执行的所有指令的地方。
    1. 输出"Hello World"std::cout << "Hello, World!" << std::endl;
      std::cout 是C++中用于输出的对象。std 是标准库的命名空间,cout 代表控制台输出。
      << 是插入操作符,用于将右侧的内容发送到左侧指定的流中。
      std::endl 是一个特殊的标记,表示新行的开始,并且会刷新输出缓冲区,确保立即显示输出。
    1. 结束主函数return 0;
      return 语句用于结束函数的执行,并将控制权返回给调用函数。在main函数中,返回值通常提供给操作系统用于指示程序的退出状态。0 表示成功。
运行程序

编译C++文件与编译C语言文件在使用的编译器上有所不同。C语言通常使用的是gcc编译器,而C++则使用的是g++编译器。尽管两者在编译器上有所区别,但编译的大致操作流程是相近的。

要编译一个C++文件,比如名为hello.cpp的文件,可以使用以下命令:

g++ hello.cpp -o hello

这条命令会调用g++编译器来编译hello.cpp文件,并将编译后生成的可执行文件命名为hello。其中,-o选项用于指定输出文件的名称。

编译完成后,可以使用以下命令来运行这个程序:

./hello

这条命令会在当前目录下执行名为hello的可执行文件。如果代码编写正确正常,即可在终端看到程序输出的结果。

常用操作符表格

先附上常用操作符表格,方便以后使用查找:

类别操作符描述使用实例
算术操作符+加法int a = 5, b = 2; int result = a + b;
算术操作符-减法int a = 5, b = 2; int result = a - b;
算术操作符*乘法int a = 5, b = 2; int result = a * b;
算术操作符/除法int a = 5, b = 2; int result = a / b;
算术操作符%取模(求余数)int a = 5, b = 2; int result = a % b;
算术操作符++自增int a = 5; a++;
算术操作符--自减int a = 5; a--;
比较操作符==等于int a = 5, b = 2; bool result = a == b;
比较操作符!=不等于int a = 5, b = 2; bool result = a != b;
比较操作符>大于int a = 5, b = 2; bool result = a > b;
比较操作符<小于int a = 5, b = 2; bool result = a < b;
比较操作符>=大于或等于int a = 5, b = 2; bool result = a >= b;
比较操作符<=小于或等于int a = 5, b = 2; bool result = a <= b;
逻辑操作符!逻辑非bool a = true; bool result = !a;
逻辑操作符&&逻辑与bool a = true, b = false; bool result = a && b;
逻辑操作符||逻辑或bool a = true, b = false; bool result = a || b;
位操作符&按位与int a = 5, b = 3; int result = a & b;
位操作符|按位或int a = 5, b = 3; int result = a | b;
位操作符^按位异或int a = 5, b = 3; int result = a ^ b;
位操作符~按位取反int a = 5; int result = ~a;
位操作符<<左移int a = 5; int result = a << 1;
位操作符>>右移int a = 5; int result = a >> 1;
赋值操作符=赋值int a; a = 5;
赋值操作符+=加等于int a = 5; a += 2;
赋值操作符-=减等于int a = 5; a -= 2;
赋值操作符*=乘等于int a = 5; a *= 2;
赋值操作符/=除等于int a = 5; a /= 2;
赋值操作符%=模等于int a = 5; a %= 2;
赋值操作符<<=左移等于int a = 5; a <<= 1;
赋值操作符>>=右移等于int a = 5; a >>= 1;
赋值操作符&=按位与等于int a = 5; a &= 3;
赋值操作符^=按位异或等于int a = 5; a ^= 3;
赋值操作符|=按位或等于int a = 5; a |= 3;
条件操作符? :条件表达式int a = 5, b = 2; int result = a > b ? a : b;
类型操作符sizeof返回变量或类型所占的字节数int a; size_t size = sizeof(a);
类型操作符typeid返回一个表达式的类型信息int a; const std::type_info& typeInfo = typeid(a);
类型操作符const_castdynamic_castreinterpret_caststatic_castC++的类型转换操作符double d = 3.14; int i = static_cast<int>(d);
其他操作符&取地址操作符int a = 5; int* ptr = &a;
其他操作符*解引用操作符int a = 5; int* ptr = &a; int value = *ptr;
其他操作符.成员访问操作符struct S { int x; }; S s; int value = s.x;
其他操作符->指针成员访问操作符struct S { int x; }; S* s = new S; int value = s->x;
其他操作符[]下标操作符int arr[5]; int value = arr[2];
其他操作符()函数调用操作符void func() { } func();
其他操作符,逗号操作符int a = 1, b = 2;
其他操作符newdelete动态内存分配和释放int* ptr = new int; *ptr = 5; delete ptr;

常用操作符使用示例

赋值操作符

对变量进行赋值

// assignment_operators.cpp
#include <iostream>  
#include <bitset>  
using namespace std;  int main() {  int a = 5;  int b = 10;  // 赋值  a = b;  cout << "a = b; a = " << a << endl;  // 加等于  a += 3;  cout << "a += 3; a = " << a << endl;  // 减等于  a -= 2;  cout << "a -= 2; a = " << a << endl;  // 乘等于  a *= 2;  cout << "a *= 2; a = " << a << endl;  // 除等于  a /= 5;  cout << "a /= 5; a = " << a << endl;  // 模等于  a %= 3;  cout << "a %= 3; a = " << a << endl;  // 重新设置下a和b的值  a = 5; // 101  b = 3; // 0011  // 左移等于  a <<= 1;  cout << "a <<= 1; a = " << bitset<4>(a) << " (Binary) or " << a << " (Decimal)" << endl;  // 右移等于  a >>= 1;  cout << "a >>= 1; a = " << bitset<4>(a) << " (Binary) or " << a << " (Decimal)" << endl;  // 按位与等于  a &= b;  cout << "a &= b; a = " << bitset<4>(a) << " (Binary) or " << a << " (Decimal)" << endl;  // 按位异或等于  a ^= b;  cout << "a ^= b; a = " << bitset<4>(a) << " (Binary) or " << a << " (Decimal)" << endl;  // 按位或等于  a |= b;  cout << "a |= b; a = " << bitset<4>(a) << " (Binary) or " << a << " (Decimal)" << endl;  return 0;  
}

运算结果:
在这里插入图片描述

类型操作符

查看或转换变量的数据类型

// type_operators.cpp
#include <iostream>  
#include <typeinfo> int main() {  int intVar = 10;  std::cout << "int的大小: " << sizeof(int) << " bytes" << std::endl;  std::cout << "TintVar的类型: " << typeid(intVar).name() << std::endl;  double* doublePtr = new double(3.14);  std::cout << "指针的大小: " << sizeof(doublePtr) << " bytes" << std::endl;  std::cout << "指针的类型: " << typeid(doublePtr).name() << std::endl;  // 类型转换int i = 42;  float f = static_cast<float>(i); // static_cast转换  const int constInt = 100;  int* p = const_cast<int*>(&constInt); // const_cast去除常量性   int intValue = 1234;  int* intPtr = &intValue;  char* charPtr = reinterpret_cast<char*>(intPtr); // reinterpret_cast重新解释类型  // 清理动态分配的内存  delete doublePtr;  return 0;  
}

在这里插入图片描述

逻辑操作符

对变量进行 等逻辑操作

#include <iostream>  
using namespace std;  int main() {  bool a = true;  bool b = false;  // 逻辑非  bool not_a = !a;  cout << "!a = " << not_a << endl;  // 逻辑与  bool and_result = a && b;  cout << "a && b = " << and_result << endl;  // 逻辑或  bool or_result = a || b;  cout << "a || b = " << or_result << endl;  return 0;  
}

在这里插入图片描述

三目运算符

使用?:符号进行条件运算,例如int max = (a > b) ? a : b; 判断ab的大小,将较大的值赋给max

#include <iostream>  int main() {  int x = 5;  int y = 10;  // 条件 ? 表达式1 : 表达式2   int max = (x > y) ? x : y;  std::cout << "最大值是: " << max << std::endl;  return 0;  
}

在这里插入图片描述

比较运算符

用于比较变量之间的大小、是否相等

#include <iostream>  
using namespace std;  int main() {  int a = 10;  int b = 5;  // 等于  if (a == b) {  cout << "a等于b" << endl;  } else {  cout << "a不等于b" << endl;  } // 不等于  if (a != b) {  cout << "a不等于b" << endl;  }  // 大于  if (a > b) {  cout << "a大于b" << endl;  }  // 小于  if (b < a) {  cout << "a小于b" << endl;  }  // 大于或等于  if (a >= b) {  cout << "a大于等于b" << endl;  }  // 小于或等于  if (b <= a) {  cout << "b小于等于a" << endl;  }  return 0;  
}

在这里插入图片描述

算术操作符

对变量进行数学运算

#include <iostream>  
using namespace std;  int main() {  int a = 10;  int b = 3;  // 加法  int sum = a + b;  cout << "a + b = " << sum << endl;  // 减法  int difference = a - b;  cout << "a - b = " << difference << endl;  // 乘法  int product = a * b;  cout << "a * b = " << product << endl;  // 除法  if (b != 0) {  double quotient = static_cast<double>(a) / b;  cout << "a / b = " << quotient << endl;  }  // 取模  int remainder = a % b;  cout << "a % b = " << remainder << endl;  // 自增  a++;  cout << "a after a++ = " << a << endl;  // 自减  b--;  cout << "b after b-- = " << b << endl;  return 0;  
}

在这里插入图片描述

位运算符

对变量进行位操作,是对整数在内存中的二进制位进行操作的一种运算方式。

#include <iostream>  
#include <bitset>  
using namespace std;  int main() {  unsigned int a = 15; // Binary: 1111  unsigned int b = 9;  // Binary: 1001  std::cout << "a = " << bitset<4>(a) << ", b = " << bitset<4>(b) << std::endl;// 按位与  unsigned int and_result = a & b;  cout << "a & b = " << bitset<4>(and_result) << endl;  // 按位或  unsigned int or_result = a | b;  cout << "a | b = " << bitset<4>(or_result) << endl;  // 按位异或  unsigned int xor_result = a ^ b;  cout << "a ^ b = " << bitset<4>(xor_result) << endl;  // 按位取反  unsigned int not_a = ~a;  cout << "~a = " << bitset<32>(not_a) << endl; // Assuming a 32-bit unsigned int  // 左移  unsigned int left_shift = a << 2;  cout << "a << 2 = " << bitset<8>(left_shift) << endl;  // 右移  unsigned int right_shift = a >> 1;  cout << "a >> 1 = " << bitset<4>(right_shift) << endl;  return 0;  
}

在这里插入图片描述

其他操作符

包括逗号操作符,、成员访问操作符.->、作用域解析操作符::、指针相关操作符*&(取地址)、以及sizeof操作符等

#include <iostream>  void printHello() // 函数声明 printHello(),函数用来打印"Hello, GGBond" 
{  std::cout << "Hello, GGBond" << std::endl;  
}  int main() {  int arr[5] = {1, 2, 3, 4, 5};  int* ptr = arr; // 隐式使用&操作符,arr是第一个元素的地址  std::cout << "arr[0]的地址: " << &arr[0] << std::endl;  std::cout << "[0]的值: " << *ptr << std::endl; // 使用*操作符解引用  // 使用 . 和 -> 操作符访问成员  struct ExampleStruct {  int x;  };  ExampleStruct obj;  obj.x = 10;  ExampleStruct* pObj = &obj;  std::cout << "obj.x: " << obj.x << std::endl;  std::cout << "pObj->x: " << pObj->x << std::endl;  // 使用下标操作符 []  std::cout << "arr[2]: " << arr[2] << std::endl;  // 调用函数printHello();  // 使用逗号操作符  int a = 1, b = 2, c;  c = (a += 2, b += 3, a + b);  std::cout << "c: " << c << std::endl; // 逗号操作符返回最后一个表达式的值,所以c的值是8  // 使用 new 和 delete 操作符  int* dynamicInt = new int(5);  std::cout << "动态整数的值: " << *dynamicInt << std::endl;  delete dynamicInt;  return 0;  
}

在这里插入图片描述

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

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

相关文章

智慧医院临床检验管理系统源码(LIS),全套LIS系统源码交付,商业源码,自主版权,支持二次开发

实验室信息系统是集申请、采样、核收、计费、检验、审核、发布、质控、查询、耗材控制等检验科工作为一体的网络管理系统。它的开发和应用将加快检验科管理的统一化、网络化、标准化的进程。一体化设计&#xff0c;与其他系统无缝连接&#xff0c;全程化条码管理。支持危机值管…

DataX(二):DataX安装与入门

1. 官方地址 下载地址&#xff1a;http://datax-opensource.oss-cn-hangzhou.aliyuncs.com/datax.tar.gz 源码地址&#xff1a;GitHub - alibaba/DataX: DataX是阿里云DataWorks数据集成的开源版本。 2. 前置要求 Linux JDK(1.8 以上&#xff0c;推荐 1.8) Python(推荐 Pyt…

一文总结代理:代理模式、代理服务器

概述 代理在计算机编程领域&#xff0c;是一个很通用的概念&#xff0c;包括&#xff1a;代理设计模式&#xff0c;代理服务器等。 代理类持有具体实现类的实例&#xff0c;将在代理类上的操作转化为实例上方法的调用。为某个对象提供一个代理&#xff0c;以控制对这个对象的…

测试分类篇

按测试对象划分 这里可以分为界面测试, 可靠性测试, 容错率测试, 文档测试, 兼容性测试, 安装卸载测试, 安全测试, 性能测试, 内存泄露测试. 界面测试 界面测试&#xff08;简称UI测试)&#xff0c;指按照界面的需求&#xff08;一般是UI设计稿&#xff09;和界面的设计规则…

DOS攻击实验

实验背景 Dos 攻击是指故意的攻击网络协议实现的缺陷或直接通过野蛮手段&#xff0c;残忍地耗尽被攻击对象的资源&#xff0c;目的是让目标计算机或网络无法提供正常的服务或资源访问&#xff0c;使目标系统服务系统停止响应甚至崩溃。 实验设备 一个网络 net:cloud0 一台模…

基于微信小程序+SpringBoot+Vue的儿童预防接种预约系统(带1w+文档)

基于微信小程序SpringBootVue的儿童预防接种预约系统(带1w文档) 基于微信小程序SpringBootVue的儿童预防接种预约系统(带1w文档) 开发合适的儿童预防接种预约微信小程序&#xff0c;可以方便管理人员对儿童预防接种预约微信小程序的管理&#xff0c;提高信息管理工作效率及查询…

24暑假算法刷题 | Day22 | LeetCode 77. 组合,216. 组合总和 III,17. 电话号码的字母组合

目录 77. 组合题目描述题解 216. 组合总和 III题目描述题解 17. 电话号码的字母组合题目描述题解 77. 组合 点此跳转题目链接 题目描述 给定两个整数 n 和 k&#xff0c;返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 示例 1&#xff1a; 输…

移动UI:排行榜单页面如何设计,从这五点入手,附示例。

移动UI的排行榜单页面设计需要考虑以下几个方面&#xff1a; 1. 页面布局&#xff1a; 排行榜单页面的布局应该清晰明了&#xff0c;可以采用列表的形式展示排行榜内容&#xff0c;同时考虑到移动设备的屏幕大小&#xff0c;应该设计合理的滚动和分页机制&#xff0c;确保用户…

贪心算法.

哈夫曼树 哈夫曼树&#xff08;Huffman Tree&#xff09;&#xff0c;又称为霍夫曼树或最优二叉树&#xff0c;是一种带权路径长度最短的二叉树&#xff0c;常用于数据压缩。 定义&#xff1a;给定N个权值作为N个叶子结点&#xff0c;构造一棵二叉树&#xff0c;若该树…

普乐蛙VR航天航空体验馆知识走廊VR体验带你登陆月球

VR航天航空设备是近年来随着虚拟现实&#xff08;VR&#xff09;技术的快速发展而兴起的一种新型设备&#xff0c;它结合了航天航空领域的专业知识与VR技术的沉浸式体验&#xff0c;为用户提供了前所未有的航天航空体验。以下是对VR航天航空设备的详细介绍&#xff1a; 一、设备…

UGUI优化篇--UGUI合批

UGUI合批 UGUI合批规则概述UGUI性能查看工具合批部分的特殊例子一个白色image、蓝色image覆盖了Text&#xff0c;白色image和Text哪个先渲染 Mask合批Mask为什么会产生两个drawcallMask为什么不能合批Mask注意要点 RectMask2D为什么RecMask2D比Mask性能更好主要代码RectMask2D注…

Golang | Leetcode Golang题解之第295题数据流的中位数

题目&#xff1a; 题解&#xff1a; type MedianFinder struct {nums *redblacktree.Treetotal intleft, right iterator }func Constructor() MedianFinder {return MedianFinder{nums: redblacktree.NewWithIntComparator()} }func (mf *MedianFinder) AddNum(…

MySQL中多表查询之外连接

首先先来介绍一下我做的两个表&#xff0c;然后再用他们两个举例说明。 -- 创建教师表 create table teachers( id_t int primary key auto_increment, -- 老师编号 name_t varchar(5) -- 姓名 ); -- 创建学生表 create table students( id_s int primary key auto_increment,…

数据结构——单链表OJ题(下)

目录 一、链表的回文结构 思路一&#xff1a;数组法 &#xff08;1&#xff09;注意 &#xff08;2&#xff09;解题 思路二&#xff1a;反转链表法 &#xff08;1&#xff09; 注意 &#xff08;2&#xff09;解题 二、相交链表 &#xff08;1&#xff09;思路&#…

优化算法:1.遗传算法(GA)及Python实现

一、定义 遗传算法就像是在模拟“优胜劣汰”的进化过程&#xff0c;通过选择最优秀的个体&#xff0c;交配产生下一代&#xff0c;并引入一定的变异&#xff0c;逐步优化解决问题。 二、具体步骤 初始化种群(Initialization)&#xff1a; 假设你要找到一个迷宫的最佳出口路径。…

CTF-NSSCTF[GKCTF 2021]

[GKCTF 2021]easycms 考察&#xff1a; 用扫描工具扫描目录&#xff0c;扫描到后台登录界面/admin.php 题目提示了密码是五位弱口令&#xff0c;试了试弱口令admin和12345直接成功了 任意文件下载 点击设计-->主题然后随便选择一个主题&#xff0c;点击自定义&#xff0…

故障诊断 | 基于Transformer故障诊断分类预测(Matlab)

文章目录 预测效果文章概述程序设计参考资料预测效果 文章概述 Transformer故障诊断/分类预测 | 基于Transformer故障诊断分类预测(Matlab) Transformer 模型本质上都是预训练语言模型,大都采用自监督学习 (Self-supervised learning) 的方式在大量生语料上进行训练,也就是…

CTF之网站被黑

简单看一下网页和源码没发现什么明显漏洞 那就扫描一下目录 发现了/shell.php文件&#xff0c;访问一下&#xff0c;发现是一个后台管理登录页面 别无他法只能爆破喽&#xff0c;爆破后发现密码是hack flag{25891d9e9d377f006eda3ca7d4c34c4d}

@JSONField(format = “yyyyMMddHH“)的作用和使用

JySellerItqrdDataDO对象中的字段为&#xff1a; private Date crdat; 2.数据库中的相应字段为&#xff1a; crdat datetime DEFAULT NULL COMMENT 创建时间,2. 打印出的结果为&#xff1a; “crdat”:“2024072718” 年月日时分秒 3. 可以调整format的格式 4. 这样就把Date类…

RedHat8安装Oracle19C

RedHat8安装Oracle19C 1、 更新yum源 更新yum源为阿里云镜像源&#xff1a; # 进入源目录 cd /etc/yum.repos.d/ # 删除 redhat 默认源 rm redhat.repo # 下载阿里云的centos7源 curl -O http://mirrors.aliyun.com/repo/Centos-8.repo # 替换 Centos-8.repo 中的 $releasev…