当前位置: 首页 > news >正文

LeetCode从入门到超凡(五)深入浅出---位运算

head-bar

引言

大家好,我是GISer Liu😁,一名热爱AI技术的GIS开发者。本系列文章是我跟随DataWhale 2024年9月学习赛的LeetCode学习总结文档;本文主要讲解 位运算算法。💕💕😊


一、 位运算简介

1.什么是位运算?

① 位运算的定义

位运算(Bit Operation)是指直接对整数的二进制位进行操作的运算。在计算机内部,所有的数据都是以二进制形式存储的,因此位运算可以直接操作这些二进制位,从而实现一些高效的计算。

② 优势:提高程序性能

位运算的优势在于其高效性。由于位运算是直接对二进制位进行操作,不需要进行复杂的数值转换,因此在某些情况下,使用位运算可以显著提高程序的性能。例如,在处理大量数据或需要频繁进行位操作的场景中,位运算可以大大减少计算时间

2.二进制数的基本概念

① 二进制数的表示方法

二进制数(Binary)是由 01 两个数码组成的数。在计算机中,所有的数据最终都会被转换为二进制形式进行存储和处理。

② 二进制数的位(Bit)

在二进制数中,每一个 01 被称为一个位(Bit)。位是二进制数的最小单位,多个位组合在一起可以表示更大的数值。

① 二进制与十进制的区别
  • 十进制:由 09 共 10 个数码组成,进位规则是“满十进一”。例如,7 + 2 = 99 + 2 = 11
  • 二进制:由 01 两个数码组成,进位规则是“逢二进一”。例如,1 + 0 = 11 + 1 = 10
② 二进制的进位规则:逢二进一

在二进制中,当某一位的数值达到 2 时,就会向高位进一。例如:

  • 1 + 0 = 1
  • 1 + 1 = 10(相当于十进制的 2
  • 10 + 1 = 11(相当于十进制的 3
③ 示例:二进制数的加法

让我们通过一个简单的例子来理解二进制数的加法:

  101 (二进制)
+ 011 (二进制)
------1000 (二进制)

在这个例子中:

  • 最低位 1 + 1 = 10,结果是 0,进位 1
  • 第二位 0 + 1 + 进位 1 = 10,结果是 0,进位 1
  • 第三位 1 + 0 + 进位 1 = 10,结果是 0,进位 1
  • 最高位只有进位 1,结果是 1

最终结果是 1000,即十进制的 8


3. 二进制数的转换

① 二进制转十进制

转换方法:按权展开

将二进制数转换为十进制数的方法是按权展开。每一位的权值是 2 的幂次方,从右到左依次为 2^0, 2^1, 2^2, …。

示例:二进制数 01101010 转换为十进制

二进制数:01101010
按权展开:
0 * 2^7 + 1 * 2^6 + 1 * 2^5 + 0 * 2^4 + 1 * 2^3 + 0 * 2^2 + 1 * 2^1 + 0 * 2^0
= 0 + 64 + 32 + 0 + 8 + 0 + 2 + 0
= 106

所以,二进制数 01101010 转换为十进制数是 106

② 十进制转二进制

转换方法:除二取余,逆序排列

将十进制数转换为二进制数的方法是“除二取余,逆序排列”。具体步骤如下:

  1. 将十进制数不断除以 2,记录每次的余数。
  2. 将所有余数逆序排列,得到二进制数。

示例:十进制数 106 转换为二进制

106 ÷ 2 = 53 余 053 ÷ 2 = 26 余 126 ÷ 2 = 13 余 013 ÷ 2 = 6  余 16 ÷ 2 = 3  余 03 ÷ 2 = 1  余 11 ÷ 2 = 0  余 1

将余数逆序排列,得到 1101010。由于二进制数通常从高位开始,所以最终结果是 01101010

所以,十进制数 106 转换为二进制数是 01101010

通过这些步骤,我们可以理解位运算的基本概念和二进制数的转换方法。接下来,我们将深入探讨位运算的具体操作。

二、位运算基础操作

1.按位与运算(AND)

① 运算符:&

按位与运算使用符号 & 表示。它是一种双目运算符,即需要两个操作数。

② 运算规则

按位与运算的规则是:只有当两个二进位都为 1 时,结果位才为 1。否则,结果位为 0

具体规则如下:

  • 1 & 1 = 1
  • 1 & 0 = 0
  • 0 & 1 = 0
  • 0 & 0 = 0
③ 示例

让我们通过一个具体的例子来理解按位与运算:

  01111100
& 00111110
----------00111100

逐位进行与运算:

  • 第 1 位:0 & 0 = 0
  • 第 2 位:0 & 1 = 0
  • 第 3 位:1 & 1 = 1
  • 第 4 位:1 & 1 = 1
  • 第 5 位:1 & 1 = 1
  • 第 6 位:1 & 1 = 1
  • 第 7 位:1 & 1 = 1
  • 第 8 位:0 & 0 = 0

最终结果是 00111100

2. 按位或运算(OR)

① 运算符:|

按位或运算使用符号 | 表示。它也是一种双目运算符,需要两个操作数。

② 运算规则

按位或运算的规则是:只要有一个二进位为 1,结果位就为 1。否则,结果位为 0

具体规则如下:

  • 1 | 1 = 1
  • 1 | 0 = 1
  • 0 | 1 = 1
  • 0 | 0 = 0
③ 示例:

下面通过一个具体的例子来理解按位或运算:

  01001010
| 01011011
----------01011011

逐位进行或运算:

  • 第 1 位:0 | 1 = 1
  • 第 2 位:1 | 1 = 1
  • 第 3 位:0 | 0 = 0
  • 第 4 位:0 | 1 = 1
  • 第 5 位:1 | 1 = 1
  • 第 6 位:0 | 0 = 0
  • 第 7 位:1 | 1 = 1
  • 第 8 位:0 | 1 = 1

最终结果是 01011011

3. 按位异或运算(XOR)

① 运算符:^

按位异或运算使用符号 ^ 表示。它也是一种双目运算符,需要两个操作数。

② 运算规则

按位异或运算的规则是:对应的两个二进位相异时,结果位为 1,相同时为 0

具体规则如下:

  • 1 ^ 1 = 0
  • 1 ^ 0 = 1
  • 0 ^ 1 = 1
  • 0 ^ 0 = 0
③ 示例

下例中我们理解按位异或运算:

  01001010
^ 01000101
----------00001111

逐位进行异或运算:

  • 第 1 位:0 ^ 1 = 1
  • 第 2 位:1 ^ 0 = 1
  • 第 3 位:0 ^ 0 = 0
  • 第 4 位:0 ^ 0 = 0
  • 第 5 位:1 ^ 0 = 1
  • 第 6 位:0 ^ 1 = 1
  • 第 7 位:1 ^ 0 = 1
  • 第 8 位:0 ^ 1 = 1

最终结果是 00001111

4. 取反运算(NOT)

① 运算符:~

取反运算使用符号 ~ 表示。它是一种单目运算符,只需要一个操作数。

② 运算规则

取反运算的规则是:将 1 变为 00 变为 1

具体规则如下:

  • ~0 = 1
  • ~1 = 0
③ 示例

让我们通过一个具体的例子来理解取反运算:

~01101010
----------
10010101

逐位进行取反运算:

  • 第 1 位:~0 = 1
  • 第 2 位:~1 = 0
  • 第 3 位:~1 = 0
  • 第 4 位:~0 = 1
  • 第 5 位:~1 = 0
  • 第 6 位:~0 = 1
  • 第 7 位:~1 = 0
  • 第 8 位:~0 = 1

最终结果是 10010101

5. 左移运算(SHL)

① 运算符:<<

左移运算使用符号 << 表示。它是一种双目运算符,需要一个操作数和一个移位次数。

② 运算规则

左移运算的规则是:将二进制数的各个二进位全部左移若干位,高位丢弃,低位补 0

③ 示例:01101010 左移 1

让我们通过一个具体的例子来理解左移运算:

01101010 << 1
----------
11010100

逐位进行左移运算:

  • 第 1 位:0 移出,高位丢弃
  • 第 2 位:1 移到第 1 位
  • 第 3 位:1 移到第 2 位
  • 第 4 位:0 移到第 3 位
  • 第 5 位:1 移到第 4 位
  • 第 6 位:0 移到第 5 位
  • 第 7 位:1 移到第 6 位
  • 第 8 位:0 移到第 7 位
  • 低位补 0

最终结果是 11010100

6. 右移运算(SHR)

① 运算符:>>

右移运算使用符号 >> 表示。它也是一种双目运算符,需要一个操作数和一个移位次数。

② 运算规则

右移运算的规则是:将二进制数的各个二进位全部右移若干位,低位丢弃,高位补 0

③ 示例:01101010 右移 1

让我们通过一个具体的例子来理解右移运算:

01101010 >> 1
----------
00110101

逐位进行右移运算:

  • 第 8 位:0 移出,低位丢弃
  • 第 7 位:1 移到第 8 位
  • 第 6 位:0 移到第 7 位
  • 第 5 位:1 移到第 6 位
  • 第 4 位:0 移到第 5 位
  • 第 3 位:1 移到第 4 位
  • 第 2 位:1 移到第 3 位
  • 第 1 位:0 移到第 2 位
  • 高位补 0

最终结果是 00110101


三、 位运算的应用

1. 位运算的常用操作

① 判断整数奇偶

原理:通过与 1 进行按位与运算

判断一个整数是奇数还是偶数,可以通过与 1 进行按位与运算。如果结果为 0,则该数为偶数;如果结果为 1,则该数为奇数。

示例:判断 x 是奇数还是偶数

def is_even(x):return (x & 1) == 0def is_odd(x):return (x & 1) == 1# 示例
x = 10
print(f"{x} 是偶数吗?", is_even(x))  # 输出:True
print(f"{x} 是奇数吗?", is_odd(x))   # 输出:False

思维流程
uml1

② 二进制数选取指定位

原理:使用按位与运算

要选取二进制数中的某几位,可以使用按位与运算。通过构造一个掩码(mask),掩码中对应选取位置为 1,其余位置为 0,然后与原二进制数进行按位与运算。

示例:取二进制数 01101010 的末尾 4

def get_last_n_bits(x, n):mask = (1 << n) - 1return x & mask# 示例
x = 0b01101010
n = 4
result = get_last_n_bits(x, n)
print(f"二进制数 {bin(x)} 的末尾 {n} 位是 {bin(result)}")  # 输出:0b1010

思维流程
uml2

③ 将指定位设置为 1

原理:使用按位或运算

要将二进制数中的某几位设置为 1,可以使用按位或运算。通过构造一个掩码,掩码中对应选取位置为 1,其余位置为 0,然后与原二进制数进行按位或运算。

**示例:将二进制数 01101010 的末尾 4 位设置为 **1

def set_last_n_bits(x, n):mask = (1 << n) - 1return x | mask# 示例
x = 0b01101010
n = 4
result = set_last_n_bits(x, n)
print(f"二进制数 {bin(x)} 的末尾 {n} 位设置为 1 后是 {bin(result)}")  # 输出:0b1111
④ 反转指定位

原理:使用按位异或运算

要反转二进制数中的某几位,可以使用按位异或运算。通过构造一个掩码,掩码中对应选取位置为 1,其余位置为 0,然后与原二进制数进行按位异或运算。

示例:将二进制数 01101010 的末尾 4 位反转

def invert_last_n_bits(x, n):mask = (1 << n) - 1return x ^ mask# 示例
x = 0b01101010
n = 4
result = invert_last_n_bits(x, n)
print(f"二进制数 {bin(x)} 的末尾 {n} 位反转后是 {bin(result)}")  # 输出:0b1100
⑤ 交换两个数

原理:使用按位异或运算

通过按位异或运算可以实现两个数的交换,而无需额外的变量。

示例:交换 ab 的值

def swap_numbers(a, b):a ^= bb ^= aa ^= breturn a, b# 示例
a, b = 10, 20
a, b = swap_numbers(a, b)
print(f"交换后 a = {a}, b = {b}")  # 输出:a = 20, b = 10

思维流程图

uml3

⑥ 将二进制最右侧为 1 的二进位改为 0

**原理:使用 **X & (X - 1)

要将二进制数中最右侧为 1 的二进位改为 0,可以使用 X & (X - 1) 操作。

**示例:将 01101100 最右侧的 1 改为 **0

def clear_rightmost_bit(x):return x & (x - 1)# 示例
x = 0b01101100
result = clear_rightmost_bit(x)
print(f"二进制数 {bin(x)} 最右侧的 1 改为 0 后是 {bin(result)}")  # 输出:0b1101000
⑦ 计算二进制中二进位为 1 的个数

原理:使用 X & (X - 1) 统计次数

通过不断使用 X & (X - 1) 操作,可以将二进制数中最右侧为 1 的二进位改为 0,直到所有位都为 0。统计操作次数,即可得到二进制中 1 的个数。

示例:计算 011011001 的个数

def count_ones(x):count = 0while x:x &= (x - 1)count += 1return count# 示例
x = 0b01101100
result = count_ones(x)
print(f"二进制数 {bin(x)} 中 1 的个数是 {result}")  # 输出:4

思维流程
uml4

⑧ 判断某数是否为 2 的幂次方

**原理:使用 **X & (X - 1) == 0

判断一个数是否为 2 的幂次方,可以通过 X & (X - 1) == 0 来实现。如果结果为 0,则该数是 2 的幂次方;否则,不是。

示例:判断 4 是否为 2 的幂次方

def is_power_of_two(x):return (x & (x - 1)) == 0# 示例
x = 4
result = is_power_of_two(x)
print(f"{x} 是 2 的幂次方吗? {result}")  # 输出:True

思维流程

uml5

2. 位运算的常用操作总结

① 常用操作列表
功能位运算符示例
判断整数奇偶&(x & 1) == 0
选取指定位&x & ((1 << n) - 1)
将指定位设置为 1``
反转指定位^x ^ ((1 << n) - 1)
交换两个数^a ^= b; b ^= a; a ^= b;
将最右侧 1 改为 0&x & (x - 1)
计算 1 的个数&while x: x &= (x - 1); count += 1
判断是否为 2 的幂次方&(x & (x - 1)) == 0

3. 二进制枚举子集

① 二进制枚举子集简介

子集的概念

子集是指一个集合中的任意元素都是另一个集合的元素。例如,集合 {1, 2, 3} 的子集包括 {}{1}{2}{3}{1, 2}{1, 3}{2, 3}{1, 2, 3}

二进制枚举子集的原理

对于一个元素个数为 n 的集合 S,可以用一个长度为 n 的二进制数来表示其子集。每一位对应集合中的一个元素,1 表示选取该元素,0 表示不选取该元素。通过枚举 02^n - 1 的所有二进制数,可以得到集合 S 的所有子集。

② 二进制枚举子集代码

代码实现:枚举集合 S 的所有子集

def subsets(S):n = len(S)sub_sets = []for i in range(1 << n):sub_set = []for j in range(n):if i & (1 << j):sub_set.append(S[j])sub_sets.append(sub_set)return sub_sets# 示例
S = [1, 2, 3]
result = subsets(S)
print(f"集合 {S} 的所有子集是 {result}")  # 输出:[[], [1], [2], [1, 2], [3], [1, 3], [2, 3], [1, 2, 3]]

思维流程图

uml6

Ok,今天我们就学习到这!😎👌


相关链接

  • 项目地址:LeetCode-CookBook
  • 相关文档:专栏地址
  • 作者主页:GISer Liu-CSDN博客

thank_watch

如果觉得我的文章对您有帮助,三连+关注便是对我创作的最大鼓励!或者一个star🌟也可以😂.

相关文章:

LeetCode从入门到超凡(五)深入浅出---位运算

引言 大家好&#xff0c;我是GISer Liu&#x1f601;&#xff0c;一名热爱AI技术的GIS开发者。本系列文章是我跟随DataWhale 2024年9月学习赛的LeetCode学习总结文档&#xff1b;本文主要讲解 位运算算法。&#x1f495;&#x1f495;&#x1f60a; 一、 位运算简介 1.什么是位…...

一些 Go Web 开发笔记

原文&#xff1a;Julia Evans - 2024.09.27 在过去的几周里&#xff0c;我花了很多时间在用 Go 开发一个网站&#xff0c;虽然不知道它最终会不会发布&#xff0c;但在这个过程中我学到了一些东西&#xff0c;想记录下来。以下是我的一些收获&#xff1a; Go 1.22 现在有了更…...

[Go语言快速上手]初识Go语言

目录 一、什么是Go语言 二、第一段Go程序 1、Go语言结构 注意 2、Go基础语法 关键字 运算符优先级 三、Go语言数据类型 示例 小结 一、什么是Go语言 Go语言&#xff0c;通常被称为Golang&#xff0c;是一种静态类型、编译型的计算机编程语言。它由Google的Robert Gr…...

基于STM32的智能风扇控制系统设计

引言 本项目将基于STM32微控制器设计一个智能风扇控制系统&#xff0c;通过温度传感器实时检测环境温度&#xff0c;并根据预设的温度范围自动调节风扇的转速。该系统展示了STM32的PWM输出、传感器接口以及自动控制应用的实现。 环境准备 1. 硬件设备 STM32F103C8T6 开发板…...

OpenCV 形态学相关函数详解及用法示例

OpenCV形态学相关的运算包含腐蚀(MORPH_ERODE)&#xff0c;膨胀(MORPH_DILATE)&#xff0c;开运算(MORPH_OPEN)&#xff0c;闭运算(MORPH_CLOSE)&#xff0c;梯度运算(MORPH_GRADIENT)&#xff0c;顶帽运算(MORPH_TOPHAT)&#xff0c;黑帽运算(MORPH_BLACKHAT)&#xff0c;击中…...

Kafka学习笔记(三)Kafka分区和副本机制、自定义分区、消费者指定分区

文章目录 前言7 分区和副本机制7.1 生产者分区写入策略7.1.1 轮询分区策略7.1.2 随机分区策略7.1.3 按key分区分配策略7.1.4 自定义分区策略7.1.4.1 实现Partitioner接口7.1.4.2 实现分区逻辑7.1.4.3 配置使用自定义分区器7.1.4.4 分区测试 7.2 消费者分区分配策略7.2.1 RangeA…...

华为 HCIP-Datacom H12-821 题库 (31)

&#x1f423;博客最下方微信公众号回复题库,领取题库和教学资源 &#x1f424;诚挚欢迎IT交流有兴趣的公众号回复交流群 &#x1f998;公众号会持续更新网络小知识&#x1f63c; 1. 默认情况下&#xff0c;IS-IS Level-1-2 路由器会将 Level-2 区域的明细路由信息发布到Lev…...

占位,凑满减

占位&#xff0c;凑满减...

SpringBoot校园资料平台:从零到一的构建过程

1系统概述 1.1 研究背景 如今互联网高速发展&#xff0c;网络遍布全球&#xff0c;通过互联网发布的消息能快而方便的传播到世界每个角落&#xff0c;并且互联网上能传播的信息也很广&#xff0c;比如文字、图片、声音、视频等。从而&#xff0c;这种种好处使得互联网成了信息传…...

czx前端

一、盒模型 标准盒模型&#xff1a;box-sizing: content-box。 外边距边框内边距内容区。 IE盒模型&#xff0c;怪异盒模型&#xff1a;box-sizing: border-box。 外边距内容区&#xff08;边框内边距内容区&#xff09;。 二、CSS特性 继承性: 父元素的字体大小&#xf…...

Perforce演讲回顾(上):从UE项目Project Titan,看Helix Core在大型游戏开发中的版本控制与集成使用策略

日前&#xff0c;Perforce携手合作伙伴龙智一同亮相Unreal Fest 2024上海站&#xff0c;分享Helix Core版本控制系统及其协作套件的强大功能与最新动态&#xff0c;助力游戏创意产业加速前行。 Perforce解决方案工程师Kory Luo在活动主会场&#xff0c;带来《Perforce Helix C…...

【含文档】基于Springboot+Andriod的成人教育APP(含源码+数据库+lw)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 系统定…...

CentOS7系统配置Yum环境

新安装完系统的服务器往往缺少我们常用的依赖包&#xff0c;故需要设置好yum源&#xff0c;方便软件安装&#xff0c;以下是CentOS7为例&#xff0c;系统安装后yum默认安装。 //备份之前的配置文件 mv /etc/yum.repos.d /etc/yum.repos.d.bak mkdir -p /etc/yum.repos.d 1…...

pyqt打包成exe相关流程

1、首先是安装pyinstaller, 在cmd中输入以下安装命令&#xff1a; pip3 install pyinstaller -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple/ 2、安装完毕之后&#xff0c;下一步就是找到你要打包的工程&#xff0c;打包的logo放置如下位置&#xff1a; 3、将log…...

设计模式、系统设计 record part02

软件设计模式&#xff1a; 1.应对重复发生的问题 2.解决方案 3.可以反复使用 1.本质是面向对象 2.优点很多 1.创建型-创建和使用分离 2.结构型-组合 3.行为型-协作 571123种模式 UML-统一建模语言-Unified Modeling Language 1.可视化&#xff0c;图形化 2.各种图&#xff08;9…...

github双重验证(2FA)启用方法

一、双重验证-2FA 在去年看到过说github启用双重验证的通知&#xff0c;觉得做为一个普通开发者&#xff0c;可能没有这么快会要求启用。结果&#xff0c;今天早晨一来就收到了邮件&#xff0c;要求说在11月底完成2FA的认证&#xff0c;否则权限受限。真是无了语。所谓2FA好理…...

《Linux从小白到高手》理论篇:Linux的系统服务管理

值此国庆佳节&#xff0c;深宅家中&#xff0c;闲来无事&#xff0c;就多写几篇博文。本篇详细深入介绍Linux的系统服务管理。 系统服务通常在系统启动时自动启动&#xff0c;并在后台持续运行&#xff0c;为系统和用户提供特定的功能。例如&#xff0c;网络服务、打印服务、数…...

SQL中如何进行 ‘’撤销‘’ 操作-详解

在 SQL 中&#xff0c;撤销已经执行的操作通常涉及两个主要的概念&#xff1a;事务控制和回滚操作。 ### 1. 事务控制 在支持事务的数据库管理系统&#xff08;如 MySQL 的 InnoDB 引擎&#xff09;中&#xff0c;您可以使用事务来确保数据的完整性。事务可以确保一系列的操作…...

Hadoop之WordCount测试

1、Hadoop简介&#xff1a; Hadoop是Apache旗下的一个用Java语言实现的开源软件框架&#xff0c;是一个开发和运行处理大规模数据的软件平台。 Hadoop的核心组件包括Hadoop分布式文件系统&#xff08;HDFS&#xff09;和MapReduce编程模型。HDFS是一个高度容错的系统&#xf…...

Vue和axios零基础学习

Vue的配置与项目创建 在这之前要先安装nodejs 安装脚手架 官网 Home | Vue CLI (vuejs.org) 先运行&#xff0c;切换成淘宝镜像源&#xff0c;安装速度更快 npm config set registry http://registry.npm.taobao.org 创建项目 用编译器打开一个空文件&#xff0c;在终端输入…...

stm32G473的flash模式是单bank还是双bank?

今天突然有人stm32G473的flash模式是单bank还是双bank&#xff1f;由于时间太久&#xff0c;我真忘记了。搜搜发现&#xff0c;还真有人和我一样。见下面的链接&#xff1a;https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

ES6从入门到精通:前言

ES6简介 ES6&#xff08;ECMAScript 2015&#xff09;是JavaScript语言的重大更新&#xff0c;引入了许多新特性&#xff0c;包括语法糖、新数据类型、模块化支持等&#xff0c;显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var&#xf…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程&#xff1a;&#xff08;白话解释&#xff09; 我们将原始待发送的消息称为 M M M&#xff0c;依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)&#xff08;意思就是 G &#xff08; x ) G&#xff08;x) G&#xff08;x) 是已知的&#xff09;&#xff0…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“&#x1f916;手搓TuyaAI语音指令 &#x1f60d;秒变表情包大师&#xff0c;让萌系Otto机器人&#x1f525;玩出智能新花样&#xff01;开整&#xff01;” &#x1f916; Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制&#xff08;TuyaAI…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf

FTP 客服管理系统 实现kefu123登录&#xff0c;不允许匿名访问&#xff0c;kefu只能访问/data/kefu目录&#xff0c;不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...

打手机检测算法AI智能分析网关V4守护公共/工业/医疗等多场景安全应用

一、方案背景​ 在现代生产与生活场景中&#xff0c;如工厂高危作业区、医院手术室、公共场景等&#xff0c;人员违规打手机的行为潜藏着巨大风险。传统依靠人工巡查的监管方式&#xff0c;存在效率低、覆盖面不足、判断主观性强等问题&#xff0c;难以满足对人员打手机行为精…...

Chrome 浏览器前端与客户端双向通信实战

Chrome 前端&#xff08;即页面 JS / Web UI&#xff09;与客户端&#xff08;C 后端&#xff09;的交互机制&#xff0c;是 Chromium 架构中非常核心的一环。下面我将按常见场景&#xff0c;从通道、流程、技术栈几个角度做一套完整的分析&#xff0c;特别适合你这种在分析和改…...

9-Oracle 23 ai Vector Search 特性 知识准备

很多小伙伴是不是参加了 免费认证课程&#xff08;限时至2025/5/15&#xff09; Oracle AI Vector Search 1Z0-184-25考试&#xff0c;都顺利拿到certified了没。 各行各业的AI 大模型的到来&#xff0c;传统的数据库中的SQL还能不能打&#xff0c;结构化和非结构的话数据如何和…...

comfyui 工作流中 图生视频 如何增加视频的长度到5秒

comfyUI 工作流怎么可以生成更长的视频。除了硬件显存要求之外还有别的方法吗&#xff1f; 在ComfyUI中实现图生视频并延长到5秒&#xff0c;需要结合多个扩展和技巧。以下是完整解决方案&#xff1a; 核心工作流配置&#xff08;24fps下5秒120帧&#xff09; #mermaid-svg-yP…...