7.运算符与二进制
1. 与运算符(&)
- 二元操作符,操作两个二进制数据;两个二进制数最低位对齐,只有当两个对位数都是1时才为1,否则为0
2. 或运算符(|)
- 二元操作符,操作两个二进制数据;两个二进制数最低位对齐,当两个对位数只要有一个是1则为1,否则为0
3. 异或运算符(^)
- 二元操作符,操作两个二进制数据;两个二进制数最低位对齐,只有当两个对位数字不同时为1,相同为0
4. 非运算符(~)
- 一元操作符,记下个口诀,他的相反数减一 例如:~5 就是 -6
5.1 左移运算符(<<)
- 二元操作符,数字m二进制向左移动n位的结果;结果相当于: m * 2n
5.2 右移运算符(>>)
- 二元操作符,m数字二进制向右移动n位的结果;结果相当于: m / 2n 的结果向上取整
- 注意: 最后的11向右移动两位,正好补上左边补上0; 所以结果为0
3.16
8.memset函数的运用
这是个初始化函数,作用是在一段内存块中填充某个给定的值,他是对较大结构体或数组进行清零操作的一种最快方法。
#include <string.h>
void *memset(void *s,int ch,size_t n);
将s中当前位置后面的n个字节用ch替换并返回s
-
memset() 函数常用于内存空间初始化。
-
memset()的深刻内涵:用来对一段内存空间全部设置为某个字符,一般用在对定义的字符串进行初始化
例如:memset(a,’\0’,sizeof(a));
-
memset可以方便的清空一个结构类型的变量或数组。
9.friend关键字
它能让被修饰的对象冲破本class的封装特性,从而能够访问本class的私有对象。
- 如果你在A类中,申明了函数func()是你的friend,那么func()就可以使用A类的所有成员变量,无论它在什么地方定义的。
- 如果你在A类中,申明了B类是你的friend,那么B类中的方法就可以访问A类的所有成员变量。
- #include
- using namespace std;
- class A {
- public:
- A() {
- password = 1111;
- birthday = 808;
- }
- ~A() { }
- friend int func(A a); // 向c++表示,int func(A a)是我的朋友,所以它可以使用我的所有东西。
- friend class B; // 向c++表示,class B是我的朋友,所以它可以使用我的所有东西。
- private:
- int password;
- int birthday;
- };
- int func(A a) {
- cout << a.password << " and " << a.birthday << endl; //可以访问
- a.password = 1; //甚至可以修改
- cout << a.password << endl;
- return 0;
- }
- class B {
- public:
- B() { }
- ~B() { }
- // 因为在A类中已经声明了B类是它的朋友,所以B类中方法就可以访问A类的私有变量了
- void show(A a) {
- cout << "your account is " << a.account << " and with pass: " << a.password << endl;
- }
- private:
- };
- int main() {
- A a;
- func(a);
- B b;
- b.show(a);
- system(“pause”);
- }
10.ostream的用法
ostream表示输出流
C++中的ostream这个类型,通常作为某个类的友元函数出现,用于<<操作重载中
friend ostream & operator <<(ostream & os,const CPoint & p){ return os << "x = "<<p.x << " y = "<< p.y << endl; }
这样子 可以直接输出point这个类了
11.priority用法
优先输出大数据
priority_queue<Type, Container, Functional>
Type为数据类型, Container为保存数据的容器,Functional为元素比较方式。
如果不写后两个参数,那么容器默认用的是vector,比较方式默认用operator<,也就是优先队列是大顶堆,队头元素最大。