c++算法学习-4

day12序

位运算和操作符属性

1.操作符的分类

2.⼆进制和进制转换

2进制和10进制互转

3.二进制转八和十六进制

4.原码、反码、补码


整数在内存中是以补码 的形式存储的,整数在参与位运算的时候,也都是使用内存中的补码进行计算的,计算的产生的结果也是补码 ,需要转换成原码才是真实值

5.例题

10进制转换n进制

n进制转换10进制

进制转换

6.位运算操作符

cpp 复制代码
<<   左移操作符
>>   右移操作符
&    按位与操作符
|    按位或操作符
^    按位异或操作符
~    按位取反操作符

左移操作符


右移操作符

原该值:


按位与操作符


按位或操作符


按位异或操作符


按位取反操作符

7.判断奇数和偶数

比如5是101 1是001 那么结果是001为1 所以为odd

8.保留⼆进制位中的指定位

应用场景

9.获取二进制中的指定位

这个是核心代码模式 只需要完成函数就行

平台里面已经把43无符号的正星星传递到uint32_t
应用场景

10.将指定二进制位设置为1

x |= (i<<4)


应用场景

11.将指定⼆进制位设置为0

应用场景

12.反转指定二进制位

应用场景

13.将⼆进制中最右边的1变为0

1:01 2:10 4:100 8:1000
应用场景

14.只保留二进制中最右边的1


应用场景

15.异或的巧用


使用异或交换两个数的值,只能适用于整形类型,因为异或运算仅适用于整型类型。

例题:

将数组里面的数组进行异或 当相同的时候为0

因为可以交换 所以2 3 2 可以为2 2 3

day13

16.操作符属性

结构体和类

cpp 复制代码
结构体是⼀种⾃定义的类型,使⽤这种⾃定义类型可以描述⼀些复杂对象。
前⾯我们学习的都是单⼀的数据类型,⽐如: char 、 short 、 int 、 double 类型,但是我们
现实⽣活中总是有写复杂对象,⽐如:⼈、书等,这些复杂对象,仅仅使⽤单⼀的数据类型是不能描
述的。⽐如:描述⼀本书,书有作者、出版社、定价等信息;描述⼀个⼈,⼈有名字、性别、年龄、
⾝⾼、体重等信息。那怎么描述这些复杂对象呢?
C++中引⼊了结构体和类来解决这些问题。在C++中结构体和类是相似的,这⾥⾸先介绍结构体。

1.结构体类型声明和变量定义

cpp 复制代码
struct Stu​ 是结构体类型。
s1和s是结构体变量

在创建变量的时候,结构体类型中的 struct 就可以省略了。
在创建结构体变量的时候,结构体变量的名字不能和结构体类型的名字相同。
声明的结构体类型是不占⽤内存空间,当使⽤结构体类型创建了变量后,才向内存申请了空间的。
结构体变量可以是全局变量,也可以是局部变量。

2.结构体变量的特点

结构体的初始化


结构体整体操作


结构体成员的访问


结构体嵌套

3.结构体的成员函数

C++中的结构体和C语言结构体的有⼀个比较大的差异就是:C++中的结构体中除了有成员变量之外,还可以包含成员函数。

4.运算符重载

输出:

名字:张三

语文:90

数学:80

总分:170

5.结构体排序 - sort


对字符串中的字符进行排序,默认排序的结果依然是升序


自定义排序


comp 表示可以自定义⼀个排序方法


结构体中重载()运算符-仿函数


排序结构体数据

init_stu():是一个函数(方法)。在编程里,"init"通常是初始化的缩写,所以这通常是用来给这个对象"赋初值"或"准备数据"的函数。


结构体和类的区别

1.CPP43 加号运算符重载
cpp 复制代码
#include <iostream>
using namespace std;

class Time {

    public:
        int hours;      // 小时
        int minutes;    // 分钟

        Time() {
            hours = 0;
            minutes = 0;
        }

        Time(int h, int m) {
            this->hours = h;     可以省略this->没啥用
            this->minutes = m;
        }

        void show() {
            cout << hours << " " << minutes << endl;
        }

        // write your code here......
        

};

int main() {

    int h, m;
    cin >> h;
    cin >> m;

    Time t1(h, m);
    Time t2(2, 20);

    Time t3 = t1 + t2;
    t3.show();
    
    return 0;
}

在进行t1+t2的时候会调用t1.operator+(t2)因为只有一个t2所以()里面只有一个变量(const Time& t)

Time ret通过是同Time进行创建的ret(0,0)

minutes指的是t1的 而t.minutes是t2的

2.CPP64 重载小于号
cpp 复制代码
#include <iostream>
using namespace std;

class Time {

    public:
        int hours;      // 小时
        int minutes;    // 分钟

        Time() {
            hours = 0;
            minutes = 0;
        }

        Time(int h, int m) {
            this->hours = h;
            this->minutes = m;
        }

        void show() {
            cout << hours << " " << minutes << endl;
        }

        // write your code here......
        

};

int main() {
    int h, m;
    cin >> h;
    cin >> m;

    Time t1(h, m);
    Time t2(6, 6);
	
    if (t1<t2) cout<<"yes"; else cout<<"no";
    return 0;
}
3.P5742 【深基7.例11】评等级
4.B2125 最高分数的学生姓名


使用排序的方式也是可以的:

5.B2131 甲流病人初筛

6.找出前五名
7.P1093 NOIP 2007 普及组 奖学金
8.生日

相关推荐
知识分享小能手4 小时前
统计学学习教程,从入门到精通,参数估计 — 知识点详解与公式推导(10)
学习·机器学习·概率论
有Li4 小时前
EvoMDT:用于多癌种结构化临床决策的自进化多智能体系统文献速递/医学智能体前沿
人工智能·学习·分类·文献·医学生
sulikey7 小时前
个人Linux操作系统学习笔记11 - 环境变量
linux·笔记·学习
治愈系贝壳8 小时前
ARM --- day 6 时钟
linux·arm开发·学习
minglie19 小时前
zynq高频小数据量PS闭环的三个实验-第0课:目的和目标
学习
劈星斩月9 小时前
监督学习算法 之 决策树
学习·算法·决策树
AOwhisky10 小时前
Python 学习笔记(第五期)——组合数据类型:列表、元组、集合与字典精讲——核心知识点自测与详解
开发语言·笔记·python·学习·云计算
中微极客10 小时前
Agentic AI 2026学习路径:从LangChain到生产部署
人工智能·学习·langchain
woshihuanglaoshi10 小时前
数据迁移与版本管理 - Flutter在鸿蒙平台实现数据库升级策略
数据库·学习·flutter·华为·harmonyos·鸿蒙·鸿蒙系统