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.生日



