嵌入式知识点总结 C/C++ 专题提升(七)-位操作
针对于嵌入式软件杂乱的知识点总结起来,提供给读者学习复习对下述内容的强化。
目录
1.位操作基础
2.如何求解整型数的二进制表示中1的个数 ?
3.如何求解二进制中0的个数
4.交换两个变量的值,不使用第三个变量。即a=3,b=5,交换之后a=5,b=3:
5.给定一个整型变量a,写两段代码,第一个设置a的bit3,第二个清除a 的bit 3。在以上两个操作中,要保持其它位不变。
1.位操作基础
位操作(Bitwise Operations)是直接对二进制位进行操作的一类运算,广泛应用于嵌入式开发、系统编程、算法设计等领域。以下是常用的位操作及其作用、示例。
按位与 (&
)
将两个数的每个位进行与运算。
规则:1 & 1 = 1,其余为 0。
作用:用于清零某些位,提取特定位。
示例:清除一个数的低 4 位
int x = 0b11010101; // 213
int result = x & 0b11110000; // 清除低4位
printf("Result: 0x%x\n", result); // 输出: 0xd0
按位或 (|
)
将两个数的每个位进行或运算。
规则:0 | 0 = 0,其余为 1。
作用:用于设置某些位为 1。
示例:设置某数的第 3 位为 1
int x = 0b11000001; // 193
int result = x | 0b00000100; // 设置第3位
printf("Result: 0x%x\n", result); // 输出: 0xc5
按位异或 (^
)
将两个数的每个位进行异或运算。
规则:相同为 0,不同为 1。
作用:用于翻转特定位,或无进位加法。
示例:翻转某数的第 3 位
int x = 0b11000001; // 193
int result = x ^ 0b00000100; // 翻转第3位
printf("Result: 0x%x\n", result); // 输出: 0xc5
按位取反 (~
)
将每个位取反,0 变 1,1 变 0。
作用:用于生成补码、求反值。
示例:取反某数
int x = 0b00001111; // 15
int result = ~x; // 取反
printf("Result: 0x%x\n", result); // 输出: 0xfffffff0 (补码表示)
左移 (<<
)
将二进制位左移,低位补 0。
作用:快速乘以 2 的幂。
示例:将某数左移 2 位
int x = 5; // 0b0101
int result = x << 2; // 左移2位
printf("Result: %d\n", result); // 输出: 20
右移 (>>
)
将二进制位右移,高位补符号位(算术右移)或 0(逻辑右移)。
作用:快速除以 2 的幂。
示例:将某数右移 2 位
int x = 20; // 0b00010100
int result = x >> 2; // 右移2位
printf("Result: %d\n", result); // 输出: 5
在嵌入式开发中,位操作非常常见,以下是一些典型应用场景和代码示例:
1. 控制寄存器的位操作
设置某些位
设置寄存器中某些位为 1
,比如配置 GPIO 为输出模式。
#define GPIO_DIR_REG (*(volatile unsigned int *)0x40020000) // 假设寄存器地址
#define GPIO_PIN_3 (1 << 3) // 第3位表示GPIO3void set_gpio_output() {GPIO_DIR_REG |= GPIO_PIN_3; // 设置第3位为1
}
清除某些位
清除寄存器中某些位为 0
,比如禁用某外设功能。
void disable_feature() {GPIO_DIR_REG &= ~GPIO_PIN_3; // 清除第3位
}
2. 检测某个位的状态
判断某引脚状态
检测某引脚的高低电平。
#define GPIO_INPUT_REG (*(volatile unsigned int *)0x40020010) // 输入寄存器int is_pin_high() {return (GPIO_INPUT_REG & GPIO_PIN_3) ? 1 : 0; // 检查第3位是否为1
}
3. 翻转某个位
翻转 LED 状态
嵌入式中控制 LED 灯时,经常需要翻转某 GPIO 的状态。
#define GPIO_OUTPUT_REG (*(volatile unsigned int *)0x40020004) // 输出寄存器void toggle_led() {GPIO_OUTPUT_REG ^= GPIO_PIN_3; // 翻转第3位
}
4. 提取寄存器的特定位
获取外设状态
从状态寄存器中提取某外设的状态位。
#define STATUS_REG (*(volatile unsigned int *)0x40020020) // 状态寄存器
#define DEVICE_READY_BIT (1 << 7) // 第7位表示设备准备好int is_device_ready() {return (STATUS_REG & DEVICE_READY_BIT) >> 7; // 提取第7位
}
5. 多位配置操作
设置多位
一次性设置多个位,比如配置多个 GPIO 为输出模式。
#define GPIO_OUTPUT_MASK (GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5)void configure_multiple_gpio() {GPIO_DIR_REG |= GPIO_OUTPUT_MASK; // 设置GPIO3、GPIO4、GPIO5为1
}
清除多位
清除多个位。
void clear_multiple_gpio() {GPIO_DIR_REG &= ~GPIO_OUTPUT_MASK; // 清除GPIO3、GPIO4、GPIO5
}
6. 数据压缩与解压
压缩数据
将多个小数据合并到一个 32 位变量中。
unsigned int pack_data(unsigned char a, unsigned char b, unsigned char c, unsigned char d) {return (a << 24) | (b << 16) | (c << 8) | d;
}
解压数据
从一个变量中提取多个字段。
void unpack_data(unsigned int packed, unsigned char *a, unsigned char *b, unsigned char *c, unsigned char *d) {*a = (packed >> 24) & 0xFF;*b = (packed >> 16) & 0xFF;*c = (packed >> 8) & 0xFF;*d = packed & 0xFF;
}
2.如何求解整型数的二进制表示中1的个数 ?
#include <stdio.h>int func(int x) {int countx = 0; // 计数器初始化while (x) {countx++;x = x & (x - 1); // 清除最低位的1}return countx;
}int main() {printf("%d\n", func(9999)); // 调用函数并打印结果return 0;
}
func
函数:
用于计算输入整数 x
的二进制表示中有多少个 1
。
x = x & (x - 1)
的作用是清除 x
中最低位的 1
,直到 x
变为 0
。
每次清除一个 1
时,countx
增加 1。
main
函数:
调用 func(9999)
,计算 9999
的二进制表示中有多少个 1
。
使用 printf
输出结果。
输出结果:
9999
的二进制表示为 10011100001111
,其中有 8 个 1
。
3.如何求解二进制中0的个数还有1的个数
#include <stdio.h>void count_ones_and_zeros(int x) {int count_ones = 0, count_zeros = 0;while (x) {if (x & 1) {count_ones++; // 如果最低位是 1} else {count_zeros++; // 如果最低位是 0}x >>= 1; // 右移一位,检查下一位}// 如果 x 最后的结果为 0,还需要考虑 x 可能有零填充的位// 假设我们处理的整数位数为 32 位int total_bits = sizeof(x) * 8; // 通常为 32 位(对于 32 位整数)count_zeros = total_bits - count_ones - count_zeros;printf("1's: %d, 0's: %d\n", count_ones, count_zeros);
}int main() {int numbers[] = {25, 15, 5};for (int i = 0; i < 3; i++) {printf("For %d: ", numbers[i]);count_ones_and_zeros(numbers[i]);}return 0;
}
4.交换两个变量的值,不使用第三个变量。即a=3,b=5,交换之后a=5,b=3:
#include <stdio.h>int main() {int a = 3, b = 5;printf("Before swap: a = %d, b = %d\n", a, b);a = a + b; // a 变为 8 (3 + 5)b = a - b; // b 变为 3 (8 - 5)a = a - b; // a 变为 5 (8 - 3)printf("After swap: a = %d, b = %d\n", a, b);return 0;
}
a = a + b
:a
保存了 a
和 b
的和。
b = a - b
:b
通过从 a
的和中减去原来的 b
值,得到原来的 a
值。
a = a - b
:a
通过从和中减去新的 b
值,得到原来的 b
值。
#include <stdio.h>int main() {int a = 3, b = 5;// a 0011 b 0101printf("Before swap: a = %d, b = %d\n", a, b);a = a ^ b; // a 变为 6 (3 ^ 5) 0011 0101 - 0110b = a ^ b; // b 变为 3 (6 ^ 5) 0110 0101 - 0011a = a ^ b; // a 变为 5 (6 ^ 3) 0110 0011 - 0101printf("After swap: a = %d, b = %d\n", a, b);return 0;
}
a = a ^ b
:a
变成了 a
和 b
的异或值。
b = a ^ b
:b
通过异或 a
(当前是 a ^ b
)得到原来的 a
值。
a = a ^ b
:a
通过异或 b
(当前是原来的 a
值)得到原来的 b
值。
5.给定一个整型变量a,写两段代码,第一个设置a的bit3,第二个清除a 的bit 3。在以上两个操作中,要保持其它位不变。
#include <stdio.h>
#define BIT3 (1<<3)
static int a=5;
void Set_Bit3(void){a |= BIT3;
}
void Clear_Bit3(void){a &= ~BIT3;
}
int main() {Set_Bit3();Clear_Bit3();printf("%d",a);return 0;
}
假设 a
的初始值为 5
,其二进制为 00000101
:
初始值打印:5
设置第3位后:
BIT3 = 1 << 3 = 00001000
a | BIT3 = 00000101 | 00001000 = 00001101
,结果为 13
打印:13
清除第3位后:
~BIT3 = ~00001000 = 11110111
a & ~BIT3 = 00001101 & 11110111 = 00000101
,结果为 5
打印:5
相关文章:
嵌入式知识点总结 C/C++ 专题提升(七)-位操作
针对于嵌入式软件杂乱的知识点总结起来,提供给读者学习复习对下述内容的强化。 目录 1.位操作基础 2.如何求解整型数的二进制表示中1的个数 ? 3.如何求解二进制中0的个数 4.交换两个变量的值,不使用第三个变量。即a3,b5,交换之后a5,b3: 5.给定一个…...
26. 【.NET 8 实战--孢子记账--从单体到微服务】--需求更新--用户注销、修改用户名、安全设置
在实际开发过程中,项目需求的变更和增加是常见的情况,因此这篇文章我们就模拟一下项目需求新增的情况。 一、需求 项目经理今天提出了新的功能,需要增加重置密码、安全设置、修改用户名、注销账户这四个功能,这四个功能必须是独…...
Git 分支管理与多人协作实战指南
目录 1.分支管理: 1.1.理解分支: 1.2.创建分支 1.3.切换分支 1.4.合并分支 1.5.删除分支 2.合并冲突 3.分支管理策略 分支策略 4.bug分支 5.删除临时分支 git branch -d 和 git branch -D的区别 6.多人协作 6.1.多人协作一 6.2.多人协作二…...
使用pyboard、micropython和tja1050进行can通信
单片机和can收发器之间tx、rx不需要交叉接线!!! tja1050的rx接Y3、tx接Y4 from pyb import CANcan CAN(1) can.init(modecan.NORMAL, prescaler6, sjw1, bs14, bs22, auto_restartTrue) # 1Mbps的配置,本文使用的micropython1.…...
新能源监控平台都管理哪些数据
北理新源信息科技有限公司(简称“北理新源”)依托北京理工大学电动车辆国家工程研究中心,建设和运营了“新能源汽车国家监测与管理平台”。该平台是国家级的新能源汽车数据监管平台,主要负责对新能源汽车的运行数据进行采集、监测…...
Go学习:常量
变量:程序运行期间,可以改变的量,变量声明需要使用 var 常量:程序运行期间,不可以改变的量,常量声明需要使用 const 目录 1. 常量不允许修改 2. 常量赋值不使用 : 3. 常量能够自动推导类型 1. 常量不允许…...
Apache Tika 详解
Apache Tika是一个开源的、跨平台的库,专门用于检测、提取和解析多种文件格式的元数据。以下是对Apache Tika的详细解析: 一、概述 Apache Tika旨在为各种类型的数据提取提供一个单一的API,它支持多种文件格式,包括文档、图片、…...
第12章:Python TDD完善货币加法运算(一)
写在前面 这本书是我们老板推荐过的,我在《价值心法》的推荐书单里也看到了它。用了一段时间 Cursor 软件后,我突然思考,对于测试开发工程师来说,什么才更有价值呢?如何让 AI 工具更好地辅助自己写代码,或许…...
KNN的调参方法
目录 1. K 值(邻居数 K)的选择2. 距离度量方式2.1 常见距离度量2.2 如何选择距离度量 3. 权重策略(weights)4. 特征预处理4.1 特征缩放(标准化/归一化)4.2 处理异常值 5. 特征选择或降维6. 使用交叉验证来综…...
mac 电脑上安装adb命令
在Mac下配置android adb命令环境,配置方式如下: 1、下载并安装IDE (android studio) Android Studio官网下载链接 详细的安装连接请参考 Mac 安装Android studio 2、配置环境 在安装完成之后,将android的adb工具所在…...
P3934 [Ynoi2016] 炸脖龙 I Solution
Description 给定序列 a ( a 1 , a 2 , ⋯ , a n ) a(a_1,a_2,\cdots,a_n) a(a1,a2,⋯,an). 有 m m m 个操作,分以下两种: modify ( l , r , k ) \operatorname{modify}(l,r,k) modify(l,r,k):对每个 i ∈ [ l , r ] i \in [l…...
数据库-多表查询
介绍(什么是多表查询?) 多表查询:查询时从多张表中获取所需数据 单表查询的SQL语句:select 字段列表 from 表名; 那么要执行多表查询,只需要使用逗号分隔多张表即可 如: select 字段列表 from …...
PID控制的优势与LabVIEW应用
PID控制(比例-积分-微分控制)已在工业控制领域得到广泛应用,尤其在实时控制和自动化系统中,其核心优点是简单、稳定且高效。尽管许多现代控制方法(如自适应控制、模型预测控制等)逐渐崭露头角,P…...
Next.js:构建大模型智能体GPT研究者应用的 Web开发框架
Next.js:构建大模型智能体GPT研究者应用的 Web开发框架 Next.js 基础知识 Next.js 是由 Vercel 公司开发维护的框架,极大地简化了 React 应用的开发流程。其核心特性包括: 服务器端渲染(SSR)与静态站点生成ÿ…...
航空航天混合动力(7)航空航天分布式电推进系统
航空航天分布式电推进系统 1.概述2.分布式电推进系统组成3.关键技术4.分布式电推进系统优势5.国内外研究情况5.1 国外5.2 国内6.分布式电推进系统应用场景6.1 航空领域6.2 航天领域tips:资料来自网上,仅供参考学习使用 1.概述 分布式推进系统是指飞行器推力由位于整个航空器…...
Java定时任务实现方案(一)——Timer
这篇笔记,简单来介绍一下Java如何使用Timer来实现定时任务,以及该方案的优点和缺点。 Timer是JDK自带的类,可以用来实现定时任务。使用 1.创建定时任务 定义一个实现了java.lang.Runnable接口的类,重写run()方法,…...
Linux(UOS系统:DNS)
赛题拓扑: 题目: 2.DNS 安装BIND9。配置为DNS根域服务器。其他未知域名解析,统一解析为该本机IP。创建正向区域“chinaskills.cn”。类型为Slave。主服务器为“AppSrv”。 rootispsrv:~# apt-get install bind9 -y rootispsrv:~# cd /etc/…...
一. 初始 Redis(快速入门-00)
一. 初始 Redis(快速入门-00) 文章目录 一. 初始 Redis(快速入门-00)Redis 概述:关系型数据库(如 MySQL ) 问题NoSQL 数据库(非关系性数据库)最后: Redis 概述: Redis 官方地址: https://redis.io/ Reids 中文的官方地址…...
Qt中的Item Widget组控件:QListWidget、QTreeWidget 和 QTableWidget使用方法(详细图文教程)
💪 图像算法工程师,专业从事且热爱图像处理,图像处理专栏更新如下👇: 📝《图像去噪》 📝《超分辨率重建》 📝《语义分割》 📝《风格迁移》 📝《目标检测》 &a…...
汇编与逆向(一)-汇编工具简介
RadASM是一款著名的WIN32汇编编辑器,支持MASM、TASM等多种汇编编译器,Windows界面,支持语法高亮,自带一个资源编辑器和一个调试器。 一、汇编IDE工具:RadASM RadASM有内置的语言包 下载地址:RadASM asse…...
澎峰科技计算软件栈与沐曦GPU完成适配和互认证
近期,澎峰科技与沐曦完成了对PerfXLM(推理引擎)、PerfXCloud(大模型服务平台)与沐曦的曦云系列通用计算GPU的联合测试,测试结果表明PerfXLM、PerfXCloud软件与沐曦GPU产品实现了全面兼容。 PerfXLM高性能大…...
如何用vscode断点调试Vue.js的项目
源码放在git上了,大家自己去看吧,非常简单,视频教程里面也有。 GitHub - SpaceView/howto_debug_vue_js_with_vscode: A basic project show how to debug vue with vscode How to Debug? Following, Creating a Project | Vue CLI to …...
C++17 新特性解析:Lambda 捕获 this
C17 引入了许多改进和新特性,其中之一是对 lambda 表达式的增强。在这篇文章中,我们将深入探讨 lambda 表达式中的一个特别有用的新特性:通过 *this 捕获当前对象的副本。这个特性不仅提高了代码的安全性,还极大地简化了某些场景下…...
Springboot自动配置的原理
先拿redis来举个例子 第一步导入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> 第二步配置 spring: redis: database:host:127.0.0.1 port…...
第13章:Python TDD完善货币加法运算(二)
写在前面 这本书是我们老板推荐过的,我在《价值心法》的推荐书单里也看到了它。用了一段时间 Cursor 软件后,我突然思考,对于测试开发工程师来说,什么才更有价值呢?如何让 AI 工具更好地辅助自己写代码,或许…...
solidity基础 -- 存储类型
在Solidity智能合约开发中,存储类型是一个至关重要的概念。它不仅影响合约的性能,还决定了数据的存储位置和生命周期。Solidity提供了三种主要的存储类型:storage、memory和calldata。本文将结合给定的代码示例,并通过更多实例详细…...
GA-CNN-LSTM-Attention、CNN-LSTM-Attention、GA-CNN-LSTM、CNN-LSTM四模型多变量时序预测一键对比
GA-CNN-LSTM-Attention、CNN-LSTM-Attention、GA-CNN-LSTM、CNN-LSTM四模型多变量时序预测一键对比 目录 GA-CNN-LSTM-Attention、CNN-LSTM-Attention、GA-CNN-LSTM、CNN-LSTM四模型多变量时序预测一键对比预测效果基本介绍程序设计参考资料 预测效果 基本介绍 基于GA-CNN-LST…...
AI对齐与开源发展:多学科融合创新之路
标题:AI对齐与开源发展:多学科融合创新之路 文章信息摘要: 本文分析了AI对齐研究中多学科融合的重要性及开源AI领域的最新发展。文章指出,AI对齐问题需要计算机科学与社会选择理论等学科深度结合,特别是在RLHF领域的应…...
大华Java开发面试题及参考答案 (下)
口述一种排序算法,如快排。 快速排序(Quick Sort): 快速排序是一种分治算法,基本思想是将一个数组分成两个子数组,然后递归地对这两个子数组进行排序。首先,从数组中选择一个元素作为基准元素(pivot),可以选择第一个元素、最后一个元素或随机元素。然后,将小于等于基…...
[Spring] OpenFeign的使用
🌸个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 🏵️热门专栏: 🧊 Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 🍕 Collection与…...
java文件按行写入数据后并创建行索引及查询
背景 当有很多数据需要存储,这些数据只是想要简单的按行存储和查询,不需要进行其他条件搜索,此时就可以考虑不需把这些数据存储在数据库,而是直接写入文件,然后从文件中查询 但是正常情况下,如果仅仅只是按…...
在视频汇聚平台EasyNVR平台中使用RTSP拉流的具体步骤
之前有用户反馈,在EasyNVR平台中添加Pull时使用海康设备的RTSP流地址无法播放。经过研发的优化及一系列严谨的验证流程,我们已确认优化后的EasyNVR平台,通过Pull方式添加海康设备的RTSP流已经能够正常播放。以下是具体的操作步骤:…...
OS2.【Linux】基本命令入门(1)
目录 1.操作系统是什么? 2.好操作系统的衡量标准 3.操作系统的核心工作 4.在计算机上所有行为都会被转换为硬件行为 5.文件 6.简单介绍一些基本命令 1.clear 2.pwd 3.ls 1.ls -l 2.隐藏文件的创建 3.ls -al 4.ls -ld 5.ls -F(注意是大写) 4.cd 1.cd .. "…...
WPF 复杂页面布局及漂亮 UI 界面设计全解析
在 WPF 开发领域,打造一个既具备复杂功能又拥有美观 UI 界面的应用程序是众多开发者追求的目标。复杂页面布局与漂亮的 UI 设计不仅能提升用户体验,还能展现应用的专业性和独特性。本文将深入探讨如何在 WPF 中实现复杂页面布局以及设计出令人眼前一亮的…...
002-SpringBoot整合AI(Alibaba)
SpringBoot整合AI 一、引入依赖二、配置application.yml三、获取 api-key四、编写 controller五、起服务调用 一、引入依赖 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><vers…...
c++模板进阶
前言 一、非类型模板参数 模板参数分类类型形参与非类型形参。 类型形参即:出现在模板参数列表中,跟在class或者typename之类的参数类型名称。非类型形参,就是用一个常量作为类(函数)模板的一个参数,在类(函数)模板中可将该参数…...
99.8 金融难点通俗解释:净资产收益率(ROE)
目录 0. 承前1. 简述2. 比喻:养母鸡赚钱2.1 第一步:投资母鸡2.2 第二步:母鸡下蛋2.3 第三步:计算赚钱2.4 第四步:计算ROE 3. 生活中的例子3.1 好的ROE3.2 一般的ROE3.3 差的ROE 4. 小朋友要注意4.1 ROE高不一定好4.2 R…...
原生HTML集合
一、表格 1、固定表格 <div class"tablebox"><div class"table-container"><table id"myTable" border"0" cellspacing"0" cellpadding"0"><thead><tr></tr></thead>…...
【计算机网络】- 应用层HTTP协议
目录 初识HTTP 什么是HTTP 版本 HTTPS 模型 HTTP抓包工具 为什么使用 抓包工具的下载 下载后的重要操作 Fiddler的使用 HTTP请求与响应的基本格式 HTTP请求基本格式编辑 HTTP响应基本格式 协议格式总结❗️❗️❗️编辑 HTTP 详解 认识 URL URL基本格式 …...
python学opencv|读取图像(四十)掩模:三通道图像的局部覆盖
【1】引言 前序学习了使用numpy创建单通道的灰色图像,并对灰色图像的局部进行了颜色更改,相关链接为: python学opencv|读取图像(九)用numpy创建黑白相间灰度图_numpy生成全黑图片-CSDN博客 之后又学习了使用numpy创…...
数据库:MongoDB命令行帮助解释
MongoDB命令: mongodmongosmongoperrormongoexportmongofilesmongoimportmongorestoreMongostat MongoDB包中的核心组件包括: mongod 是 MongoDB 的核心服务器进程,负责数据存储和管理。mongos 是分片集群的路由进程,负责将请求路由到正确…...
python 统计相同像素值个数
目录 python 统计相同像素值个数 最大值附近的值 python 统计相同像素值个数 import cv2 import numpy as np import time from collections import Counter# 读取图像 image cv2.imread(mask16.jpg)# 将图像转换为灰度图像 gray_image cv2.cvtColor(image, cv2.COLOR_BGR2…...
工作流引擎Camunda与LiteFlow核心组件对比
以下为 Camunda 7 和 LiteFlow 详细的介绍,包括它们的核心组件和用途。 1. Camunda 7 详细介绍 Camunda 7 是一个基于 BPMN 2.0 标准的企业级工作流和决策自动化平台。它被广泛应用于复杂业务流程的管理和执行,其核心目标是通过流程自动化来提升企业效…...
记一个Timestamp时区问题的坑
resultSet.getTimestamp(“kpi_collect_time”)查出来的Timestamp居然是带时区的, 如果该Timestamp不是UTC时区的,Timestamp.toInstant().atZone(ZoneId.of(“UTC”))会把Timestamp转成UTC时区 使用Timestamp.toLocalDateTime()可以直接把时区信息抹除 …...
R语言学习笔记之开发环境配置
一、概要 整个安装过程及遇到的问题记录 操作步骤备注(包含遇到的问题)1下载安装R语言2下载安装RStudio3离线安装pacman提示需要安装Rtools4安装Rtoolspacman、tidyfst均离线安装完成5加载tidyfst报错 提示需要安装依赖,试错逐步下载并安装…...
Hive部署
1. 最小化安装Hive 本次安装的版本是Hive的3.1.3版本 解压缩Hive压缩包 # 解压缩 tar -zxvf apache-hive-3.1.3-bin.tar.gz、 # 修改文件夹名称(看个人习惯,可以不执行) mv apache-hive-3.1.3-bin apache-hive-3.1.3在conf目录下,新增hive-env.sh&…...
Windows第一次上手鸿蒙周边
端云一体所需装备 很重要:C/D/E/F盘要有二三十G的可用空间! 硬件:华为鸿蒙实验箱(基础版)》飞机板核心板环境监测板 软件:Visual Studio Code写代码 终端编译 Hiburn烧录到开发板 MobaXterm (…...
【java数据结构】二叉搜索树
【java数据结构】二叉搜索树 一、二叉搜索树的概念二、二叉搜索树的操作2.1 插入2.2 查找2.3 删除(重点以及难点)2.3.1 删除节点的左边为null2.3.2 删除节点的右边为null2.3.3 删除的左右节点都不为空 三、二叉搜索树的性能分析3.1 最优情况3.2 最差情况…...
3D Vision--计算点到平面的距离
写在前面 本文内容 计算点到平面的距离 平台/环境 python open3d 转载请注明出处: https://blog.csdn.net/qq_41102371/article/details/121482246 目录 写在前面准备Open3D代码完 准备Open3D pip install open3d代码 import open3d as o3ddef compute_points2…...
相机内参的作用原理
由三角形角度关系,得到X_image / focal_length X_real / Z_distance 用双目测距得到Z_distance之后 然后联合X_image / focal_length可以计算得到真实世界的X_real...