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

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

Hello World

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

cpp 复制代码
#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的文件,可以使用以下命令:

bash 复制代码
g++ hello.cpp -o hello

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

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

bash 复制代码
./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;
逻辑操作符 ` `
位操作符 & 按位与 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, 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_cast C++的类型转换操作符 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;

常用操作符使用示例

赋值操作符

对变量进行赋值

cpp 复制代码
// 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;  
}

运算结果:

类型操作符

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

cpp 复制代码
// 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;  
}
逻辑操作符

对变量进行 等逻辑操作

cpp 复制代码
#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

cpp 复制代码
#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;  
}
比较运算符

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

cpp 复制代码
#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;  
}
算术操作符

对变量进行数学运算

cpp 复制代码
#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;  
}
位运算符

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

cpp 复制代码
#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操作符等

cpp 复制代码
#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;  
}
相关推荐
AI原吾9 分钟前
探索PyAV:Python中的多媒体处理利器
开发语言·python·ai·pyav
oliveira-time20 分钟前
爬虫学习8
开发语言·javascript·爬虫·python·算法
矛取矛求1 小时前
string接口的深度理解(内附思维导图)
c语言·开发语言·c++·接口·string
代码小鑫1 小时前
A15基于Spring Boot的宠物爱心组织管理系统的设计与实现
java·开发语言·spring boot·后端·毕业设计·宠物
点云侠1 小时前
二维椭圆拟合算法及推导过程
开发语言·c++·算法·计算机视觉·matlab
海绵波波1071 小时前
Webserver(4.5)复用
android·开发语言·javascript
stm 学习ing1 小时前
FPGA 第二讲 初始FPGA
c语言·开发语言·stm32·fpga开发·c#·visual studio·嵌入式实时数据库
howard20051 小时前
初试Lisp语言
开发语言·lisp
2401_871290581 小时前
Scala的包及其导入
大数据·开发语言·scala
郑小憨1 小时前
Node.js NPM以及REPL(交互式解释器) 使用介绍(基础介绍 二)
开发语言·前端·javascript·npm·node.js