学习c++的第四天
目录
运算符
算术运算符
关系运算符
逻辑运算符
位运算符
赋值运算符
杂项运算符
运算符优先级
运算符
算术运算符
算术运算符是 C++ 中用于执行基本算术操作的运算符。
- 加法运算符 (+):将两个操作数相加。例如,A + B 将得到 30,因为 10 + 20 等于 30。
- 减法运算符 (-):从第一个操作数中减去第二个操作数。例如,A - B 将得到 -10,因为 10 - 20 等于 -10。
- 乘法运算符 (*):将两个操作数相乘。例如,A * B 将得到 200,因为 10 * 20 等于 200。
- 除法运算符 (/):将第一个操作数除以第二个操作数。例如,B / A 将得到 2,因为 20 / 10 等于 2。请注意,如果操作数都是整数,则结果将取整数部分,而不是浮点数。
- 取模运算符 (%):计算第一个操作数除以第二个操作数的余数。例如,B % A 将得到 0,因为 20 没有被 10 整除时余数为 0。
- 自增运算符 (++):将整数值增加 1。例如,A++ 将使 A 的值从 10 增加到 11。
- 自减运算符 (--):将整数值减少 1。例如,A-- 将使 A 的值从 10 减少到 9。
这些算术运算符可用于各种数据类型,包括整数和浮点数。
请注意,C++ 还支持复合赋值运算符,如 +=、-=、*=、/= 和 %=,它们可以将算术运算符与赋值运算符组合起来,简化代码编写。
实例
#include <iostream>int main() {int A = 10;int B = 20;// 加法运算符int sum = A + B;std::cout << "A + B = " << sum << std::endl;// 减法运算符int diff = A - B;std::cout << "A - B = " << diff << std::endl;// 乘法运算符int product = A * B;std::cout << "A * B = " << product << std::endl;// 除法运算符int quotient = B / A;std::cout << "B / A = " << quotient << std::endl;// 取模运算符int remainder = B % A;std::cout << "B % A = " << remainder << std::endl;// 自增运算符A++;std::cout << "After A++, A = " << A << std::endl;// 自减运算符B--;std::cout << "After B--, B = " << B << std::endl;return 0;
}
输出结果为:
A + B = 30
A - B = -10
A * B = 200
B / A = 2
B % A = 0
After A++, A = 11
After B--, B = 19
关系运算符
下面是 C++ 中常用的关系运算符及其描述
- 等于运算符 (==):检查两个操作数是否相等,如果相等则返回 true,否则返回 false。
- 不等于运算符 (!=):检查两个操作数是否不相等,如果不相等则返回 true,否则返回 false。
- 大于运算符 (>):检查第一个操作数是否大于第二个操作数,如果是则返回 true,否则返回 false。
- 大于运算符 (>):检查第一个操作数是否大于第二个操作数,如果是则返回 true,否则返回 false。
- 小于运算符 (<):检查第一个操作数是否小于第二个操作数,如果是则返回 true,否则返回 false。
- 大于等于运算符 (>=):检查第一个操作数是否大于等于第二个操作数,如果是则返回 true,否则返回 false。
- 小于等于运算符 (<=):检查第一个操作数是否小于等于第二个操作数,如果是则返回 true,否则返回 false。
实例
#include <iostream>
using namespace std;int main() {int A = 10;int B = 20;// 示例:检查两个操作数的值是否相等if (A == B) {cout << "A等于B" << endl;} else {cout << "A不等于B" << endl;}// 示例:检查两个操作数的值是否不相等if (A != B) {cout << "A不等于B" << endl;} else {cout << "A等于B" << endl;}// 示例:检查左操作数的值是否大于右操作数的值if (A > B) {cout << "A大于B" << endl;} else {cout << "A不大于B" << endl;}// 示例:检查左操作数的值是否小于右操作数的值if (A < B) {cout << "A小于B" << endl;} else {cout << "A不小于B" << endl;}// 示例:检查左操作数的值是否大于或等于右操作数的值if (A >= B) {cout << "A大于等于B" << endl;} else {cout << "A小于B" << endl;}// 示例:检查左操作数的值是否小于或等于右操作数的值if (A <= B) {cout << "A小于等于B" << endl;} else {cout << "A大于B" << endl;}return 0;
}
输出结果为:
A不等于B
A不等于B
A不大于B
A小于B
A小于B
A小于等于B
逻辑运算符
在C++中,逻辑运算符用于对布尔值进行操作和组合。常用的逻辑运算符有三个:逻辑与(&&),逻辑或(||)和逻辑非(!)。
逻辑与(&&)运算符:
- 用于检查多个条件是否同时为真。
- 当且仅当所有条件都为真时,整个表达式的结果才为真。
- 如果任何一个条件为假,则整个表达式的结果为假。
逻辑或(||)运算符:
- 用于检查多个条件是否有至少一个为真。
- 当任何一个条件为真时,整个表达式的结果就为真。
- 只有当所有条件都为假时,整个表达式的结果才为假。
逻辑非(!)运算符:
- 用于对单个条件进行取反操作。
- 如果条件为真,则取反后为假;如果条件为假,则取反后为真。
实例
#include <iostream>
using namespace std;int main() {bool condition1 = true;bool condition2 = false;// 示例:逻辑与运算符if (condition1 && condition2) {cout << "Both condition1 and condition2 are true." << endl;}else {cout << "At least one of condition1 and condition2 is false." << endl;}// 示例:逻辑或运算符if (condition1 || condition2) {cout << "At least one of condition1 and condition2 is true." << endl;}else {cout << "Both condition1 and condition2 are false." << endl;}// 示例:逻辑非运算符if (!condition1) {cout << "condition1 is false." << endl;}else {cout << "condition1 is true." << endl;}return 0;
}
在这个示例中,我们定义了两个布尔变量 condition1 和 condition2,并使用逻辑运算符来检查它们的值。根据条件的不同结果,我们输出相应的消息。
输出结果为:
At least one of condition1 and condition2 is false.
At least one of condition1 and condition2 is true.
condition1 is true.
位运算符
位运算符作用于位,通过逐位进行操作。下面是位运算符的一些常见示例及其描述:
按位与(&)运算符:
- 对两个操作数的每一个二进制位进行操作。
- 当且仅当两个操作数相应的二进制位都为1时,结果为1,否则为0。
按位或(|)运算符:
- 对两个操作数的每一个二进制位进行操作。
- 当两个操作数相应的二进制位中至少有一个为1时,结果为1,否则为0。
按位异或(^)运算符:
- 对两个操作数的每一个二进制位进行操作。
- 当且仅当两个操作数相应的二进制位不同时,结果为1,否则为0。
按位取反(~)运算符:
- 只对一个操作数的每一个二进制位进行操作。
- 结果是操作数的每一个二进制位取反。
左移位(<<)运算符:
- 将一个操作数的二进制位向左移动指定数量的位数。
- 向左移动时,右边的位用0填充。
右移位(>>)运算符:
- 将一个操作数的二进制位向右移动指定数量的位数。
- 向右移动时,左边的位用符号位填充。
假设变量A的值为60(二进制为0011 1100),变量B的值为13(二进制为0000 1101)。根据不同的运算符和操作数,以下是它们的运算结果:
A & B 的结果为12(二进制为0000 1100)
A | B 的结果为61(二进制为0011 1101)
A ^ B 的结果为49(二进制为0011 0001)
~A 的结果为-61(二进制为1100 0011,有符号二进制数的补码形式)
A << 2 的结果为240(二进制为1111 0000)
A >> 2 的结果为15(二进制为0000 1111)
以上是位运算符的常见用法。它们在处理位级操作时非常有用。
实例
以下是使用位运算符的示例代码:
#include <iostream>
using namespace std;int main() {int num1 = 5; // 二进制为101int num2 = 9; // 二进制为1001// 示例:按位与运算符int result1 = num1 & num2;cout << "num1 & num2 的结果为:" << result1 << endl; // 输出:1(二进制为001)// 示例:按位或运算符int result2 = num1 | num2;cout << "num1 | num2 的结果为:" << result2 << endl; // 输出:13(二进制为1101)// 示例:按位异或运算符int result3 = num1 ^ num2;cout << "num1 ^ num2 的结果为:" << result3 << endl; // 输出:12(二进制为1100)// 示例:按位取反运算符int result4 = ~num1;cout << "~num1 的结果为:" << result4 << endl; // 输出:-6(二进制为11111111111111111111111111111010)// 示例:左移位运算符int result5 = num1 << 1;cout << "num1 << 1 的结果为:" << result5 << endl; // 输出:10(二进制为1010)// 示例:右移位运算符int result6 = num2 >> 1;cout << "num2 >> 1 的结果为:" << result6 << endl; // 输出:4(二进制为100)return 0;
}
赋值运算符
下表列出了 C++ 支持的赋值运算符:
| 运算符 | 描述 | 实例 |
|---|---|---|
| = | 简单的赋值运算符,把右边操作数的值赋给左边操作数 | C = A + B 将把 A + B 的值赋给 C |
| += | 加且赋值运算符,把右边操作数加上左边操作数的结果赋值给左边操作数 | C += A 相当于 C = C + A |
| -= | 减且赋值运算符,把左边操作数减去右边操作数的结果赋值给左边操作数 | C -= A 相当于 C = C - A |
| *= | 乘且赋值运算符,把右边操作数乘以左边操作数的结果赋值给左边操作数 | C *= A 相当于 C = C * A |
| /= | 除且赋值运算符,把左边操作数除以右边操作数的结果赋值给左边操作数 | C /= A 相当于 C = C / A |
| %= | 求模且赋值运算符,求两个操作数的模赋值给左边操作数 | C %= A 相当于 C = C % A |
| <<= | 左移且赋值运算符 | C <<= 2 等同于 C = C << 2 |
| >>= | 右移且赋值运算符 | C >>= 2 等同于 C = C >> 2 |
| &= | 按位与且赋值运算符 | C &= 2 等同于 C = C & 2 |
| ^= | 按位异或且赋值运算符 | C ^= 2 等同于 C = C ^ 2 |
| |= | 按位或且赋值运算符 | C |= 2 等同于 C = C | 2 |
实例
#include <iostream>
using namespace std;int main() {int a = 10, b = 5;// 简单赋值运算符int c = a;cout << "c = " << c << endl;// 加且赋值运算符c += a;cout << "c += a: " << c << endl;// 减且赋值运算符c -= b;cout << "c -= b: " << c << endl;// 乘且赋值运算符c *= a;cout << "c *= a: " << c << endl;// 除且赋值运算符c /= b;cout << "c /= b: " << c << endl;// 求模且赋值运算符c %= a;cout << "c %= a: " << c << endl;// 左移且赋值运算符c <<= 2;cout << "c <<= 2: " << c << endl;// 右移且赋值运算符c >>= 1;cout << "c >>= 1: " << c << endl;// 按位与且赋值运算符c &= 3;cout << "c &= 3: " << c << endl;// 按位异或且赋值运算符c ^= 7;cout << "c ^= 7: " << c << endl;// 按位或且赋值运算符c |= 15;cout << "c |= 15: " << c << endl;return 0;
}
输出结果为:
c = 10
c += a: 20
c -= b: 15
c *= a: 150
c /= b: 30
c %= a: 0
c <<= 2: 0
c >>= 1: 0
c &= 3: 0
c ^= 7: 7
c |= 15: 15
杂项运算符
- sizeof:sizeof 运算符用于获取变量或类型的大小(以字节为单位)。例如,sizeof(int) 返回整数类型的大小。
- Condition ? X : Y:条件运算符是一种三元运算符,根据条件的真假选择返回不同的值。如果条件为真,则返回 X,否则返回 Y。例如,(a > b) ? a : b 将返回 a 或 b 中较大的值。
- , 逗号运算符:逗号运算符用于顺序执行一系列表达式,并返回最后一个表达式的值。在多个表达式之间使用逗号表示它们按顺序执行。例如,int x = (a = 1, a + 2),逗号运算符会先执行 a = 1,然后执行 a + 2,将结果赋给 x。
- .(点)和 ->(箭头):这两个运算符用于访问类、结构体和共用体的成员。. 运算符用于直接访问已知对象的成员,而 -> 运算符用于通过指针访问对象的成员。例如,obj.member 和 ptr->member。
- Cast 强制转换运算符:强制转换运算符用于将一种数据类型转换为另一种数据类型。可以使用不同的强制转换操作符进行类型转换,例如 int(2.2) 将浮点数转换为整数。
- & 指针运算符:& 运算符用于获取变量的地址,并返回指向该变量的指针。例如,int* ptr = &a 将 a 的地址赋给指针 ptr。
- * 指针运算符:* 运算符用于解引用指针,获取指针所指向的对象的值。例如,int value = *ptr 将获取指针 ptr 所指向的对象的值。
这些运算符在 C++ 编程中广泛使用,对于正确的数据处理和操作是至关重要的。
实例
#include <iostream>
using namespace std;int main() {int a = 10;int b = 5;int c = 0;// sizeof 运算符cout << "Size of int: " << sizeof(int) << " bytes" << endl;// 条件运算符c = (a > b) ? a : b;cout << "Greater value: " << c << endl;// 逗号运算符int x = (c = 1, c + 2);cout << "Comma operator result: " << x << endl;// 成员运算符struct Person {string name;int age;};Person person;person.name = "John";person.age = 25;cout << "Person name: " << person.name << ", age: " << person.age << endl;// 强制转换运算符double d = 2.2;int i = int(d);cout << "Double to int conversion: " << i << endl;// 指针运算符int* ptr = &a;cout << "Address of a: " << ptr << endl;cout << "Value at address: " << *ptr << endl;return 0;
}
这段代码演示了以下操作:
- 使用 sizeof 运算符获取 int 类型的大小。
- 使用条件运算符根据条件选择较大的值。
- 使用逗号运算符执行多个表达式,并返回最后一个表达式的值。
- 使用成员运算符访问结构体成员。
- 使用强制转换运算符将 double 类型转换为 int 类型。
- 使用指针运算符获取变量的地址,并解引用指针获取变量的值。
输出结果为:
Size of int: 4 bytes
Greater value: 10
Comma operator result: 3
Person name: John, age: 25
Double to int conversion: 2
Address of a: 000000D6246FF6C4
Value at address: 10
运算符优先级
下表将按运算符优先级从高到低列出各个运算符,具有较高优先级的运算符出现在表格的上面,具有较低优先级的运算符出现在表格的下面。在表达式中,较高优先级的运算符会优先被计算。
| 类别 | 运算符 | 结合性 |
|---|---|---|
| 后缀 | () [] -> . ++ - - | 从左到右 |
| 一元 | + - ! ~ ++ - - (type)* & sizeof | 从右到左 |
| 乘除 | * / % | 从左到右 |
| 加减 | + - | 从左到右 |
| 移位 | << >> | 从左到右 |
| 关系 | < <= > >= | 从左到右 |
| 相等 | == != | 从左到右 |
| 位与 AND | & | 从左到右 |
| 位异或 XOR | ^ | 从左到右 |
| 位或 OR | | | 从左到右 |
| 逻辑与 AND | && | 从左到右 |
| 逻辑或 OR | || | 从左到右 |
| 条件 | ?: | 从右到左 |
| 赋值 | = += -= *= /= %=>>= <<= &= ^= |= | 从右到左 |
| 逗号 | , | 从左到右 |
实例
#include <iostream>
using namespace std;int main() {int a = 10;int b = 5;int c = 2;int result = a + b * c; // 先计算 b * c,再加上 a,结果为 20cout << "a + b * c = " << result << endl;result = (a + b) * c; // 先加 a 和 b,再乘以 c,结果为 30cout << "(a + b) * c = " << result << endl;bool x = true;bool y = false;bool result1 = x && y || !x; // 先计算逻辑与 x && y,再计算逻辑或 ||,最后取非 !x,结果为 truecout << "x && y || !x = " << result1 << endl;bool result2 = x || !y && x; // 先计算取非 !y,再计算逻辑与 !y && x,最后计算逻辑或 x || (!y && x),结果为 truecout << "x || !y && x = " << result2 << endl;int num = 5;int num2 = 10;num += num2 * 2; // 先计算 num2 * 2,再将结果加到 num 上,等价于 num = num + (num2 * 2),最后 num 的值为 25cout << "num += num2 * 2: " << num << endl;int value = (num > num2) ? num : num2; // 先比较 num 和 num2 的大小,根据条件返回较大的值,最后 value 的值为 25cout << "value = " << value << endl;return 0;
}
这段代码演示了以下操作:
- 展示了不同优先级运算符的计算顺序。
- 展示了逻辑运算符的使用,包括逻辑与(&&)和逻辑或(||)。
- 展示了赋值运算符的使用,包括复合赋值运算符(+=)。
- 展示了条件运算符(?:)的使用。
输出结果为:
a + b * c = 20
(a + b) * c = 30
x && y || !x = 0
x || !y && x = 1
num += num2 * 2: 25
value = 25相关文章:
学习c++的第四天
目录 运算符 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 杂项运算符 运算符优先级 运算符 算术运算符 算术运算符是 C 中用于执行基本算术操作的运算符。 加法运算符 ():将两个操作数相加。例如,A B 将得到 30,因为 …...
BIOS开发笔记 – 显示
UEFI启动流程跑完前三阶段,UEFI环境的准备基本完成,到BDS阶段的任务就是准备引导OS。在此之前还需要使一些必要的硬件工作起来,比如键盘设备,屏幕等,怎么让屏幕工作呢?简单的说就是执行其相关的UEFI驱动。要注意一下的是,这里所说的驱动并不是屏幕的驱动,而是GPU的驱动…...
数据库实验:SQL的数据视图
目录 视图概述视图的概念视图的作用 实验目的实验内容实验要求实验过程 视图概述 视图是由数据库中的一个表或多个表导出的虚拟表,其作用是方便用户对数据的操作 视图的概念 视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一…...
k8s-调度约束
目录 工作机制 调度过程 指定调度节点 亲和性 键值运算关系 Pod亲和性与反亲和性 污点(Taint) 和 容忍(Tolerations) 维护操作 故障排除步骤 Kubernetes 是通过 List-Watch 的机制进行每个组件的协作,保持数据同步的,每个组件之间的设计实现了…...
C++设计模式_26_设计模式总结
本篇为C++设计模式的总结课,此篇再回到原帮助大家梳理一下。 文章目录 1. 一个目标2. 两种手段3. 八大原则4. 重构技法5. 从封装变化角度对模式分类6. C++对象模型7. 关注变化点和稳定点8. 什么时候不用模式9. 经验之谈10. 设计模式成长之路1. 一个目标 管理变化,提高复用!…...
解锁AI语言模型的秘密武器 - 提示工程
文章目录 一、LLM概念1.1 什么是LLMs1.2 LLMs类别1.3 如何构建LLM 二、提示工程简介2.1 基础提示2.2 使用提示词的必要性 三、 提示3.1 如何写好提示词3.1.1 使用分隔符3.1.2 结构化输出3.1.3 风格信息3.1.4 给定条件3.1.5 给出示例3.1.6 步骤分解3.1.7 不断迭代 3.2 提示工程3…...
qt手撕菜单栏
最近有个项目需要手写菜单栏。 就写了一个简单的程序,供大家参考! #include <QApplication> #include <QMainWindow> #include <QMenuBar> #include <QMenu> #include...
UE5——网络——RPC
RPC(这个是官方文档的资料) 要将一个函数声明为 RPC,您只需将 Server、Client 或 NetMulticast 关键字添加到 UFUNCTION 声明。 例如,若要将某个函数声明为一个要在服务器上调用、但需要在客户端上执行的 RPC,您可以…...
基于ASP.NET MVC + Bootstrap的仓库管理系统
基于ASP.NET MVC Bootstrap的仓库管理系统。源码亲测可用,含有简单的说明文档。 适合单仓库,基本的仓库入库管理,出库管理,盘点,报损,移库,库位等管理,有着可视化图表。 系统采用Bo…...
Jetson NX FFmpeg硬件编解码实现
最近在用Jetson Xavier NX板子做视频处理,但是CPU进行视频编解码,效率比较地下。 于是便考虑用硬解码来对视频进行处理。 通过jtop查看,发现板子是支持 NVENC硬件编解码的。 1、下载源码 因为需要对ffmpeg进行打补丁修改,因此需…...
5.2用队列实现栈(LC225-E)
算法: 其实这道题不用像上一道题一样,用两个队列实现栈。 由于队列的数据结构特性。用一个队列就可实现栈。 难点还是在出队的时候: 比如队列[1,2,3],要模拟一个栈入栈就是直接append(其实就是C中的push࿰…...
项目上线前发现严重Bug怎么办?
今天分享一个面试问题,现在有一个面试场景: 项目计划明天发布,但是在今天你作为测试人员发现了一个严重的bug,市场相关人员又在催发布的事情,这个时候你应该怎么办? 这是测试工程师不管是在面试࿰…...
【WPF系列】- Application详解
【WPF系列】- Application详解 文章目录 【WPF系列】- Application详解一、Application简介Application 类具体有以下功能: 二、初始App.xaml二、自定义Main方法启动WPF应用程序第一种:启动应用程序的代码第二种:启动应用程序的代码第三种:启…...
常见的内置方法:__call__,__getitem__,__iter__,__next__
1.__call__方法 在创建好一个实例后,直接调用一个实例会报错。但使用__call__后,可以让这个实例可以像方法一样被调用(就是一个函数后面加个括号的函数调用形式) class Person:passp1 Person() p1() # 实例这样无法直接被调…...
python用cv2画图(line, rectangle, text等)
Python做图像图形研究的时候,通常需要画很多辅助几何形状(比如bounding box等)。基于opencv的几何图形绘制具有易用性,而且天然能和numpy数组交互。 本文总结了几种常用的cv2画几何图形的方法,当一个简易的手册使用&a…...
解决方案中word中分页符的使用
在投标方案中要善于使用“分页符”,尽可能少使用分节符号,没有分页符前,你每次修改你的标书或者文件,增加或者修改内容后。你的格式字段前后都是会发生变化,如何稳定的保证结构呢,那就是分页符的使用&#…...
ubuntu20.04下apache启用php7.4-fpm
默认的apache不解析php文件: 直接安装提示依赖有问题: libapache2-mod-php7.4 : Depends: php7.4-common ( 7.4.3-4ubuntu2.19) but 1:7.4.33-8ubuntu20.04.1deb.sury.org1 is to be installed rootfv-az1492-145:/tmp# sudo apt install libapache2-…...
在 CentOS 服务器上部署 JAR 文件到 Docker 容器
标题:在 CentOS 服务器上部署 JAR 文件到 Docker 容器的详细步骤 步骤 1: 确保 Docker 已安装 在开始之前,确保在 CentOS 服务器上已经安装了 Docker。如果没有安装,可以使用以下命令进行安装: sudo yum install docker步骤 2:…...
vector类模拟实现(c++)(学习笔记)
vector 构造函数析构函数[]push_backsize()capacity()reserve()push_back() 迭代器实现非const和const版本 pop_back()resize()insert()***重点erase()***重点再谈构造函数!拷贝构造函数****(重点)运算符重载***(重点)…...
Redis Sentinel 哨兵模式
Sentinel 哨兵模式 Redis Sentinel 官网 Redis 的 Sentinel 文档 -- Redis中国用户组(CRUG) Sentinel Redis 命令参考(红色) Sentinel 通过监控的方式获取主机的工作状态是否正常,当主机发生故障时, Senti…...
Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...
HTML 语义化
目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案: 语义化标签: <header>:页头<nav>:导航<main>:主要内容<article>&#x…...
React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...
ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
系统设计 --- MongoDB亿级数据查询优化策略
系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...
ip子接口配置及删除
配置永久生效的子接口,2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...
网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...
LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》
这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...
