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

news2024/11/15 4:32:14

开头介绍下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.coloradmin.cn/o/1946280.html

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

相关文章

【Nginx】Mac电脑安装nginx

使用brew安装nginx brew install nginx查看nginx信息 brew info nginx启动nginx brew services start nginx验证是否启动成功 浏览器输入地址&#xff1a;127.0.0.1:8080 停止服务 brew services stop nginx进入nginx文件目录 cd /opt/homebrew/etc/nginx重启服务 bre…

轻量化YOLOv7系列:结合G-GhostNet | 适配GPU,华为诺亚提出G-Ghost方案升级GhostNet

轻量化YOLOv7系列&#xff1a;结合G-GhostNet | 适配GPU&#xff0c;华为诺亚提出G-Ghost方案升级GhostNet 需要修改的代码models/GGhostRegNet.py代码 创建yaml文件测试是否创建成功 本文提供了改进 YOLOv7注意力系列包含不同的注意力机制以及多种加入方式&#xff0c;在本文…

分布式光伏并网AM5SE-IS防孤岛保护装置介绍——安科瑞 叶西平

产品简介 功能&#xff1a; AM5SE-IS防孤岛保护装置主要适用于35kV、10kV及低压380V光伏发电、燃气发电等新能源并网供电系统。当发生孤岛现象时&#xff0c;可以快速切除并网点&#xff0c;使本站与电网侧快速脱离&#xff0c;保证整个电站和相关维护人员的生命安全。 应用…

【简历】吉林某一本大学:JAVA秋招简历指导,简历通过率比较低

注&#xff1a;为保证用户信息安全&#xff0c;姓名和学校等信息已经进行同层次变更&#xff0c;内容部分细节也进行了部分隐藏 简历说明 这是一份吉林某一本大学25届计算机专业同学的Java简历。因为学校是一本&#xff0c;所以求职目标以中厂为主。因为学校背景在中厂是正常…

基于Jeecgboot3.6.3的vue3版本前后端分离的流程管理平台

声明一下&#xff1a;因为这个项目license问题无法开源&#xff0c;更多技术支持与服务联系本人或加入我的知识星球提供一些技术服务。 初步完成了基于jeecgboot3.6.3的vue3版本的前后端流程管理平台&#xff0c;基于flowable6.8.1&#xff0c;同时支持bpmn流程设计器与仿钉钉流…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第五十一章 添加设备树节点

i.MX8MM处理器采用了先进的14LPCFinFET工艺&#xff0c;提供更快的速度和更高的电源效率;四核Cortex-A53&#xff0c;单核Cortex-M4&#xff0c;多达五个内核 &#xff0c;主频高达1.8GHz&#xff0c;2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

利用Django和Ansible实现自动化部署

在软件开发的快节奏世界中&#xff0c;自动化部署是提高开发效率和确保软件质量的关键。Django是一个功能强大的Python Web框架&#xff0c;它允许开发者快速构建安全、可扩展的Web应用。Ansible则是一个简单且强大的自动化工具&#xff0c;它可以用于配置系统、部署软件以及执…

通信原理思科实验四:静态路由项配置实验

实验四 静态路由项配置实验 一&#xff1a;实验内容 二&#xff1a;实验目的 三、实验原理 四、实验步骤 选择三个2811型号的路由器 R1、R2、R3 路由器默认只有两个快速以太网接口&#xff0c;为路由器R1和R3增加快速以太网接口模块NM-1FE-TX&#xff0c;安装后检查路由器的接…

一番赏小程序搭建,线上一番赏市场

一番赏作为一个经久不衰的潮流市场&#xff0c;一直流行于消费者市场中。一番赏商品拥有不同系列&#xff0c;涵盖了热门动漫、漫画、影视等主题&#xff0c;商品包含了手办等周边商品&#xff0c;具有非常大的收藏价值。相比于其他潮玩模式&#xff0c;一番赏的性价比更高&…

Mindspore框架循环神经网络RNN模型实现情感分类|(四)损失函数与优化器

Mindspore框架循环神经网络RNN模型实现情感分类 Mindspore框架循环神经网络RNN模型实现情感分类|&#xff08;一&#xff09;IMDB影评数据集准备 Mindspore框架循环神经网络RNN模型实现情感分类|&#xff08;二&#xff09;预训练词向量 Mindspore框架循环神经网络RNN模型实现…

DASCTF-BabyAndroid

一个apk文件 下载下运行不出来 题目有提示 这是截取的信息 第一次写,我就按照大佬的wp思路来 首先我们确定 Host: yuanshen.com 这个信息 jeb打开,搜索 成功锁定到有价值的信息 protected String doInBackground(String[] params) {String contentText params[0];try {…

day20算法

一、算法的相关概念 程序 数据结构 算法 算法是程序设计的灵魂&#xff0c;结构是程序设计的肉体 算法&#xff1a;计算机解决问题的方法或步骤 1.1 算法的特性 1> 确定性&#xff1a;算法中每一条语句都有确定的含义&#xff0c;不能模棱两可 2> 有穷性&#xf…

ModuleNotFoundError: No module named ‘scrapy.utils.reqser‘

在scrapy中使用scrapy-rabbitmq-scheduler会出现报错 ModuleNotFoundError: No module named scrapy.utils.reqser原因是新的版本的scrapy已经摒弃了该方法,但是scrapy-rabbitmq-scheduler 没有及时的更新,所以此时有两种解决方法 方法一.将scrapy回退至旧版本,找到对应的旧版…

提取集合中元素的某个属性组成String类型的集合,并且属性的值要非null,最后拼接该String类型的集合得到字符串

一、String类型的集合拼接得到字符串 方法一&#xff1a; 使用的是Java 8或更高版本&#xff0c;可以使用String.join()方法&#xff0c;这个方法可以非常方便地将一个集合中的元素拼接成一个字符串&#xff0c;并允许你指定分隔符。 import java.util.ArrayList; import j…

认识神经网络【多层感知器数学原理】

文章目录 1、什么是神经网络2、人工神经网络3、多层感知器3.1、输入层3.2、隐藏层3.2.1、隐藏层 13.2.2、隐藏层 2 3.3、输出层3.4、前向传播3.4.1、加权和⭐3.4.2、激活函数 3.5、反向传播3.5.1、计算梯度3.5.2、更新权重和偏置 4、小结 &#x1f343;作者介绍&#xff1a;双非…

微信小程序实现聊天界面,发送功能

.wxml <scroll-view scroll-y"true" style"height: {{windowHeight}}px;"><view wx:for"{{chatList}}" wx:for-index"index" wx:for-item"item" style"padding-top:{{index0?30:0}}rpx"><!-- 左…

Qt基础 | QSqlTableModel 的使用

文章目录 一、QSqlTableModel 的使用1.主窗口MainWindow类定义2.构造函数3.打开数据表3.1 添加 SQLite 数据库驱动、设置数据库名称、打开数据库3.2 数据模型设置、选择模型、自定义代理组件、界面组件与模型数据字段间的数据映射 4.添加、插入与删除记录5.保存与取消修改6.设置…

TikTok Shop全托管上线JIT,并预计10月开放西班牙和爱尔兰站点

据悉&#xff0c;TikTok Shop官方近期在其全托管平台上正式推出了JIT&#xff08;Just-In-Time&#xff09;生产模式&#xff0c;这一创新举措彻底颠覆了传统供应链流程&#xff0c;实现了“先有订单&#xff0c;再精准供货”的高效运营模式。对于广大卖家而言&#xff0c;这无…

网络安全基础知识及安全意识培训(73页可编辑PPT)

引言&#xff1a;在当今数字化时代&#xff0c;网络安全已成为企业和个人不可忽视的重要议题。随着互联网的普及和技术的飞速发展&#xff0c;网络威胁日益复杂多变&#xff0c;从简单的病毒传播到高级持续性威胁&#xff08;APT&#xff09;、勒索软件攻击、数据泄露等&#x…

汇川技术|中型PLC网络组态、CPU配置、使用技巧

哈喽&#xff0c;你好啊&#xff0c;我是雷工&#xff01; 今天学习InoProShop网络组态架构&#xff0c;熟悉Modbus和ModbusTCP网络编辑器的使用&#xff0c;并了解网络组态和相关功能使用技巧。 以下为学习笔记。 01 网络组态 1.1、支持总线 从总线视图上可以看出&#xff0c…