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

筑基五层 —— 位运算看这篇就行了

目录

一.修炼必备

二. 位运算

二.移位运算符

三.位运算综合使用

  恭喜你,成功突破至筑基五层!!!


一.修炼必备

 1.入门必备:VS2019社区版,下载地址:Visual Studio 较旧的下载 - 2019、2017、2015 和以前的版本 (microsoft.com)

 2.趁手武器:印象笔记/有道云笔记

 3.修炼秘籍:牛客网 - 找工作神器|笔试题库|面试经验|实习招聘内推,求职就业一站解决_牛客网 (nowcoder.com)

 4.雷劫必备:leetcode 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 

 注:遇到瓶颈怎么办?百度百科_全球领先的中文百科全书 (baidu.com)

二. 位运算

 1.什么是位运算?

        ——位运算就是直接对整数在内存中的二进制位进行操作的运算

 2.位运算操作符

位操作符特点

&(按位与)

有0为0,全1为1

|(按位或)有1为1,全0为0
^(按位异或)相同为0.不同为1
~(按位取反)0变1,1变0

 注:

  1)二进制的运算均是以补码进行运算的

  2)异或满足交换律和结合律

交换律:num ^ 0 = num; 0 ^ num = num;

结合律:num ^ a ^ a = num; a ^ num ^ a = num;

//任何数和0异或等于本身,相同数异或为0

  3)只有对整数才能进行位运算,浮点数不能进行位运算

 3.一个小case快速了解位运算符

#include<stdio.h>int main()
{int a=7;int b=4;//按位与int c=a&b;//00000000 00000000 00000000 00000111 -> a: 7//00000000 00000000 00000000 00000100 -> b: 4//00000000 00000000 00000000 00000100 -> a&b: 4printf("%d & %d = %d\n",a,b,c);// 7 & 4 = 4//按位或c=a|b;//00000000 00000000 00000000 00000111 -> a: 7//00000000 00000000 00000000 00000100 -> b: 4//00000000 00000000 00000000 00000111 -> a|b: 7 printf("%d | %d = %d\n",a,b,c);// 7 | 4 = 7//按位异或c=a^b;//00000000 00000000 00000000 00000111 -> a: 7//00000000 00000000 00000000 00000100 -> b: 4//00000000 00000000 00000000 00000011 -> a^b: 3printf("%d ^ %d = %d\n",a,b,c);// 7 ^ 4 = 3//按位取反c = ~a;//00000000 00000000 00000000 00000111 -> a: 7//11111111 11111111 11111111 11111000 -> ~a(补码)//11111111 11111111 11111111 11110111 -> 反码//10000000 00000000 00000000 00001000 -> 原码(打印的是原码):-8printf("~%d = %d\n", a, c);//~7 = -8return 0;
}

 4.常用的位操作符

  1)判断奇偶性

奇数:(num & 1) == 1 等价于 num % 2 == 1

偶数:(num & 1) == 0 等价于 num % 2 == 0

注:为什么num&1要加括号? —— ==的优先级比&的优先级高

#include <stdio.h>int main()
{int num = 0;scanf("%d", &num);//若是想要使用num & 1 == 1,则需要使用括号括上(num & 1) == 1if (num & 1){printf("%d是奇数\n", num);}else{printf("%d是偶数\n", num);}return 0;
}

  2)计算二进制中有几个1:num = num & (num -1)

#include <stdio.h>int getOneCount(int num)
{int count = 0;while (num){num = num & (num - 1);count++;//测试用例1:7//00000000 00000000 00000000 00000111  : 7//00000000 00000000 00000000 00000110  : 6//00000000 00000000 00000000 00000110  : 6 :结果//00000000 00000000 00000000 00000101  : 5//00000000 00000000 00000000 00000100  : 4: 结果//00000000 00000000 00000000 00000011  : 3//00000000 00000000 00000000 00000000  : 0: 结果 -->跳出循环//测试用例2:10//00000000 00000000 00000000 00001010  : 10//00000000 00000000 00000000 00001001  : 9//00000000 00000000 00000000 00001000  : 8: 结果//00000000 00000000 00000000 00000111  : 7//00000000 00000000 00000000 00000111  : 0: 结果 -->跳出循环}return count;
}int main()
{int num = 0;scanf("%d", &num);int count = getOneCount(num);//计算1的个数printf("%d的二进制中有%d个1\n", num, count);return 0;
}

  3)num & -num:得到二进制的最低位的1(不一定是最后一位)

#include <stdio.h>int main()
{int num = 0;scanf("%d", &num);int ret = num & -num;printf("%d & -%d = %d\n", num, num, ret);//说明:二进制的运算均是以补码进行的//测试案例1:7//10000000 00000000 00000000 00000111 -->原码  -7//11111111 11111111 11111111 11111000 -->反码//11111111 11111111 11111111 11111001 -->补码//00000000 00000000 00000000 00000111 -->补码  7//00000000 00000000 00000000 00000001 --> 1 :结果//测试用例2: 10//10000000 00000000 00000000 00001010 -->原码 -10//11111111 11111111 11111111 11110101 -->反码//11111111 11111111 11111111 11110110 -->补码//00000000 00000000 00000000 00001010 -->补码  10//00000000 00000000 00000000 00000010 -->2 : 结果return 0;
}

  4)num & ~num:0

#include <stdio.h>int main()
{int num = 0;scanf("%d", &num);int ret = num & ~num;printf("%d & ~%d = %d\n", num, num, ret);//测试用例1:3//00000000 00000000 00000000 00000011 :3//11111111 11111111 11111111 11111100 :~3//00000000 00000000 00000000 00000000 :0 结果//测试用例2:4//00000000 00000000 00000000 00000100 :4//11111111 11111111 11111111 11111011 :~4//00000000 00000000 00000000 00000000 :0 结果return 0;
}

  5)低位首0变1:num | (num+1)

#include <stdio.h>int main()
{int num = 0;scanf("%d", &num);int ret = num | (num + 1);printf("%d | %d = %d\n", num, num + 1, ret);//测试用例1:5//00000000 00000000 00000000 00000101 :5//00000000 00000000 00000000 00000110 :6//00000000 00000000 00000000 00000111 : 7 --> 低位首0变1//测试用例2:9//00000000 00000000 00000000 00001001 :9//00000000 00000000 00000000 00001010 :10//00000000 00000000 00000000 00001011 :11 --> 低位首0变1return 0;
}

  6)求num的相反数:~num + 1

#include <stdio.h>int main()
{int num = 0;scanf("%d", &num);int ret = ~num + 1;printf("%d\n", ret);//测试用例1:5//11111111 11111111 11111111 11111010 :~5//11111111 11111111 11111111 11111011 :~5 + 1 补码//11111111 11111111 11111111 11111010 :反码//10000000 00000000 00000000 00000101 :原码 --> -5//测试用例2:-5//10000000 00000000 00000000 00000101 原码//11111111 11111111 11111111 11111010 反码//11111111 11111111 11111111 11111011 补码//00000000 00000000 00000000 00000100 ~(-5)//00000000 00000000 00000000 00000101 ~(-5)+ 1 --> 5(结果)return 0;
}

  7)判断数是不是2的幂:num & (num-1) == 0

#include <stdio.h>int main()
{int num = 0;scanf("%d", &num);if ((num & (num - 1)) == 0){printf("%d是2的幂\n", num);}else{printf("%d不是2的幂\n", num);}//测试案例1:2//00000000 00000000 00000000 00000010 :2//00000000 00000000 00000000 00000001 :1//00000000 00000000 00000000 00000000 :0 --> 结果//测试用例2:8//00000000 00000000 00000000 00001000 : 8//00000000 00000000 00000000 00000111 : 7//00000000 00000000 00000000 00000000 : 0 -->结果return 0;
}

  8)异或应用:变量交换

#include <stdio.h>int main()
{int a = 0;int b = 0;scanf("%d %d", &a, &b);//交换变量a = a ^ b;b = a ^ b;a = a ^ b;printf("%d %d\n", a, b);return 0;
}

二.移位运算符

 1.什么是移位运算符?

        ——在C语言中,使用<<和>>对数的二进制位进行向左移动和向右移动,而<<和>>称为移位运算符

 2.移位操作符

移位操作符特点
<<左边丢弃,右边补0
>>

算术右移:右边丢弃,左边补符号位

逻辑右移:右边丢弃,左边补0

二进制位进行移位的时候,不要移动负数位,因为这个标准是未定义的

 3.一个小case快速了解移位操作符 

#include <stdio.h>int main()
{int num = 7;int ret = num << 2;//00000000 00000000 00000000 00000111  num//000000 00000000 00000000 0000011100  num << 2 :28printf("%d\n", ret);//28ret = num >> 2;//00000000 00000000 00000000 00000111  num//注:我们在这个地方进行的是算术右移,现在大多数编译器都是进行算术右移的//0000000000 00000000 00000000 000001  num >> 2 :1printf("%d\n", ret);//1return 0;
}

 4.常用的移位操作

  1)num >> 1 等价于 num / 2

#include <stdio.h>int main()
{int num = 0;scanf("%d", &num);int ret = num >> 1;int res = num / 2;//测试案例1:10//00000000 00000000 00000000 00001010  num: 10//00000000 00000000 00000000 00000101  num >> 1:5//num / 2 = 5//测试案例2:15//00000000 00000000 00000000 00001111  num:15//00000000 00000000 00000000 00000111  num >> 1:7//num / 2= 7if (ret == res){printf("num>>1和num/2相等\n");}else{printf("num>>1和num/2不相等\n");}return 0;
}

  2)去掉num的低x位(从最低位一直到x位):num >> x

#include <stdio.h>int main()
{int num = 0;scanf("%d", &num);int ret = num >> 3;//去掉低三位//00000000 00000000 00000000 00001111  num:15//00000000 00000000 00000000 00000001  num:1printf("%d\n", ret);//1ret = num >> 2;//去掉低两位//00000000 00000000 00000000 00001111  num:15//00000000 00000000 00000000 00000011  num:3printf("%d\n", ret);//3return 0;
}

三.位运算综合使用

  注:规定,我的最低位是从1开始,最高位是32

  1.获取num二进制位的第n位值:(num >> n) &1

#include <stdio.h>int main()
{int num = 0;scanf("%d", &num);int ret = (num >> 3) & 1;printf("%d\n", ret);//测试案例:15//00000000 00000000 00000000 00001111  num:15//00000000 00000000 00000000 00000001  num >> 3//00000000 00000000 00000000 00000001  (num >> 3) & 1//00000000 00000000 00000000 00000001  1return 0;
}

  2.将num的第(n+1)位置为1:num | (1 << n)

#include <stdio.h>int main()
{int num = 0;scanf("%d", &num);//将num的第4位置为1int ret = num | (1 << 3);printf("%d\n", ret);//测试案例:5//00000000 00000000 00000000 00000101//00000000 00000000 00000000 00001000 1 << 3//00000000 00000000 00000000 00001101 13return 0;
}

  3.将num的第(n+1)位置为0:num & (~(1 << n))

#include <stdio.h>int main()
{int num = 0;scanf("%d", &num);//将num的第3位置为0int ret = num & (~(1 << 2));printf("%d\n", ret);//测试案例:5//00000000 00000000 00000000 00000100 1 << 2//11111111 11111111 11111111 11111011 ~(1 << 2) :补码//00000000 00000000 00000000 00000101 : 5//00000000 00000000 00000000 00000001 : num & (~(1 << 2))return 0;
}

  4.获取num的第(n+1)位的幂值:num & (1 << n)

#include <stdio.h>int main()
{int num = 0;scanf("%d", &num);//获取num第3位的幂值int ret = num & (1 << 2);printf("%d\n", ret);//测试案例 :5//00000000 00000000 00000000 00000101 : 5//00000000 00000000 00000000 00000100 : 1 << 2//00000000 00000000 00000000 00000100 : num & (1 << 2): 4//测试案例: 8//00000000 00000000 00000000 00001000 : 8//00000000 00000000 00000000 00000100 : 1 << 2//00000000 00000000 00000000 00000000 : num & (1 << 2): 0return 0;
}

  5.将num的最高位到(n+1)位置为0:num & ((1 << n) - 1)

#include <stdio.h>int main()
{int num = 0;scanf("%d", &num);//将num的最高位到第4位置为0int ret = num & ((1 << 3) - 1);printf("%d\n", ret);//测试案例:121//00000000 00000000 00000000 01111001 :121//00000000 00000000 00000000 00000111 : 1 << 3 - 1//00000000 00000000 00000000 00000001 : 7return 0;
}

  6.将num的第1位到第(n+1)位置为0:num & (~((1 << (n + 1)) - 1))

#include <stdio.h>int main()
{int num = 0;scanf("%d", &num);//将num的第0位到第3位置为0int ret = num & (~((1 << (2 + 1)) - 1));printf("%d\n", ret);//测试案例: 121//00000000 00000000 00000000 00000111 :(1 << (2 +1) - 1)//11111111 11111111 11111111 11111000 :~(1 << (2 +1) - 1)//00000000 00000000 00000000 01111001 :121//00000000 00000000 00000000 01111000return 0;
}

  7.代替减法进行两数相减:x + ~y + 1

#include <stdio.h>int main()
{int x = 0;int y = 0;scanf("%d %d", &x, &y);int ret = x + ~y + 1;printf("%d - %d = %d\n", x, y, ret);//测试案例:x = 5, y = 3//00000000 00000000 00000000 00000011 y//11111111 11111111 11111111 11111100 ~y//00000000 00000000 00000000 00000101 x//00000000 00000000 00000000 00000001 x + ~y = 1//00000000 00000000 00000000 00000010 x + ~y + 1 = 2//测试案例: x = 3, y = 5//00000000 00000000 00000000 00000101 y//11111111 11111111 11111111 11111010 ~y//00000000 00000000 00000000 00000011 x//11111111 11111111 11111111 11111101 x + ~y//11111111 11111111 11111111 11111110 x + ~y + 1 补码//11111111 11111111 11111111 11111101 反码//10000000 00000000 00000000 00000010 原码 -2return 0;
}

  8.代替加法进行两数相加:x - ~y - 1

#include <stdio.h>int main()
{int x = 0;int y = 0;scanf("%d %d", &x, &y);int sum = ~y;int ret = x - ~y - 1;printf("%d + %d = %d\n", x, y, ret);//测试案例:x = 5, y = 3//00000000 00000000 00000000 00000011 y//00000000 00000000 00000000 00000101 x//11111111 11111111 11111111 11111100 ~y//00000000 00000000 00000000 00001001 x - ~y//00000000 00000000 00000000 00001000 x - ~y - 1: 8return 0;
}

  注:位运算的基本常用的操作就在这点了,但是远不止这点,需要我们更加努力的学习和探索位运算的奥妙。

  注:若是觉得CSDN看起来很难受的话,请去有道云看我写的原文(排版更好)

  链接在此:有道云笔记

  恭喜你,成功突破至筑基五层!!!

相关文章:

筑基五层 —— 位运算看这篇就行了

目录 一.修炼必备 二. 位运算 二.移位运算符 三.位运算综合使用 恭喜你&#xff0c;成功突破至筑基五层&#xff01;&#xff01;&#xff01; 一.修炼必备 1.入门必备&#xff1a;VS2019社区版&#xff0c;下载地址&#xff1a;Visual Studio 较旧的下载 - 2019、2017、201…...

windows安装proget实现nuget私有包部署

下载proget 官网 下载地址 免费下载 安装proget 下载完成之后双击安装 选择ProGet 默认选择即可 也可以指定数据库&#xff0c;SQL Server数据库 Server服务器名;Database数据库名;User Id用户名;Password密码 Serverlocalhost;DatabaseProGet2;User Idsa;Passwordxxxx…...

SpringBoot简单集成OpenFeign

问题 在SpringBoot中简单集成Feign&#xff0c;不想使用Rest Temple了。 步骤 Maven <properties><spring.cloud-version>2022.0.1</spring.cloud-version></properties> <dependencyManagement><dependencies><dependency><g…...

dfs(九)字符串的全排列

字符串的排列_牛客题霸_牛客网【牛客题霸】收集各企业高频校招笔面试题目&#xff0c;配有官方题解&#xff0c;在线进行百度阿里腾讯网易等互联网名企笔试面试模拟考试练习,和牛人一起讨论经典试题,全面提升你的技术能力https://www.nowcoder.com/practice/fe6b651b66ae47d7ac…...

别具一格,原创唯美浪漫情人节表白专辑,(复制就可用)(html5,css3,svg)表白爱心代码(1)

别具一格&#xff0c;原创唯美浪漫情人节表白专辑&#xff0c; (复制就可用)&#xff08;html5,css3,svg)表白爱心代码(1) 一、 前言 回眸之间&#xff0c;丰盈了岁月&#xff0c;涟漪了思绪&#xff0c;轻轻落笔&#xff0c;不写伤痕&#xff0c;不写仇怨&#xff0c;只写岁月…...

Hudi-集成Spark之spark-sql方式

Hudi集成Spark之spark-sql方式 启动spark-sql # 启动spark-sql之前需要先启动Hive的Metastore nohup hive --service metastore & #针对Spark 3.2 spark-sql \--conf spark.serializerorg.apache.spark.serializer.KryoSerializer \--conf spark.sql.catalog.spark_catal…...

快速排序基本原理

快速排序基本原理1.快速排序1.1 基本原理1.2 快速排序执行步骤1.2.1 分区包含步骤1.2.1 分区步骤1.3 快速排序大O记法表示2. 将[0,5,2,1,6,3]进行快速排序 【实战】2.1 第一次分区步骤2.2 第二次分区步骤2.3 第三次分区步骤2.4 第四次分区步骤3.快速排序代码实现1.快速排序 1.…...

Android开发笔记-提纲(连载中....)

文章目录Android概述Android开发学习笔记提纲1. 认识AS开发Android的基础入门知识2. 认识Activity的生命周期和基础使用3. 认识Activity之间的跳转和传值4. 认识Intent以及全局Activity的属性的共享5. 认识Service6. 学习跨应用服务【AIDL通信】Android概述 Android系统框架的四…...

React Native(一)

移动端触摸事件example1:<ButtononPress{() > {Alert.alert(你点击了按钮&#xff01;);}}title"点我&#xff01;" />Touchable 系列组件TouchableHighlight 此组件的背景会在用户手指按下时变暗TouchableNativeFeedback 会在用户手指按下时形成类似墨水涟…...

Kotlin 26. Kotlin 如何播放音频文件

Kotlin 如何播放音频文件 文章目录Kotlin 如何播放音频文件1 下载并放置音频文件2 activity_main.xml3 MainActivity.kt1 下载并放置音频文件 我们可以随便下载一个音频文件&#xff0c;比如 alarm.mp3&#xff0c;需要将其放置在 /res/raw/ 路径下。 2 activity_main.xml 这…...

recv和明文收包分析

我们CTRLg 跳到recv 分析收包函数 发现函数会断并且收包函数返回值(收包包长)也会不断变化 那么证明recv是真正的收包函数&#xff0c;游戏没有重新实现该函数 我们只要分析该函数即可 在recv函数执行完毕以后下断 eax是包长,esi28是包指针 我们上2个号&#xff0c;让另外…...

【IVIF的超分重建】

Multimodal super-resolution reconstruction of infrared and visible images via deep learning &#xff08;基于深度学习的红外和可见光图像多模态超分辨率重建&#xff09; 提出了一种基于编解码器结构的红外-可见光图像融合方法。图像融合任务被重新表述为保持红外-可见…...

“深度学习”学习日记。--加深网络

2023.2.13 深度学习 是加深了层的深度神经网络的学习过程。基于之前介绍的网络&#xff0c;只需要通过 叠加层&#xff0c; 就可以创建深度网络 之前的学习&#xff0c;已经学习到了很多东西&#xff0c;比如构成神经网络的各种层、参数优化方法、误差反向传播法&#xff0c;…...

2023前端面试总结含参考答案

文章目录1. 父子组件生命周期的执行顺序:2. 原型链&#xff1a;3. promise的理解&#xff1a;4. 数组循环&#xff0c;foreach&#xff0c;filter&#xff0c;map&#xff0c;reduce5. 数组去重&#xff0c;set6. 组件通信方式7. 路由钩子8. 首页首屏加载优化&#xff1a;9. th…...

总览 Java 容器--集合框架的体系结构

前言 我们在讲 Java 的数据类型的时候&#xff0c;单独介绍过数组&#xff0c;数组也确实是开发程序中常用的内存类型之一&#xff0c;不过 Java 内置的数组限制颇多&#xff0c;所以此后扩展出了List这种结构&#xff0c;与之类似的Set、Queue 这些内存中的容器都被放在了 Co…...

即便考分很好也不予录取的研究生复试红线,都是原则性问题

在浙大研究生招生录取政策文件中有这么一句话&#xff1a;坚持“按需招生、全面衡量、择优录取、宁缺毋滥”的原则&#xff0c;以提高人才选拔质量为核心&#xff0c;在确保安全性、公平性和科学性的基础上&#xff0c;做到统筹兼顾、精准施策、严格管理。字字体现出研究生招生…...

Android java创建子线程的几种方法

1.新建一个类继承自Thread&#xff0c;并重写run()方法&#xff0c;并在里面编写耗时逻辑。 1 2 3 4 5 6 7 class ThreadTest extends Thread { Override public void run() { //具体的耗时逻辑代码 } } new ThreadTest().st…...

UVa 11212 Editing a Book 编辑书稿 IDA* Iterative Deepening A Star 迭代加深搜剪枝

题目链接&#xff1a;Editing a Book 题目描述&#xff1a; 给定nnn个(1<n<10)1<n<10)1<n<10)数字&#xff0c;数字分别是1,2,3,...,n1, 2, 3, ...,n1,2,3,...,n&#xff0c;但是顺序是打乱的&#xff0c;你可以选择一个索引区间的数字进行剪切操作。问最少进…...

第一章:unity性能优化之内存优化

目录 前言 unity性能优化之内存的优化 一、unity Analysis工具的使用。 二、内存优化方法 1、设置和压缩图片 2、图片格式 3、动画文件 4、模型 5、RenderTexture&#xff08;RT&#xff09; 6、分辨率 7、资源的重复利用 8、shader优化 9、对bundle进行良好的管…...

2023年家族办公室研究报告

第一章 概况 家族办公室最早起源于古罗马时期的大“Domus”&#xff08;家族主管&#xff09;以及中世纪时期的大“Domo”&#xff08;总管家&#xff09;。现代意义上的家族办公室出现于19世纪中叶&#xff0c;一些抓住产业革命机会的大亨将金融专家、法律专家和财务专家集合…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中&#xff0c;可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行&#xff0c;可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令&#xff0c;并忽略错误 rm somefile…...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性&#xff1a;电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中&#xff0c;电力载波技术&#xff08;PLC&#xff09;凭借其独特的优势&#xff0c;正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据&#xff0c;无需额外布…...

多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验

一、多模态商品数据接口的技术架构 &#xff08;一&#xff09;多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如&#xff0c;当用户上传一张“蓝色连衣裙”的图片时&#xff0c;接口可自动提取图像中的颜色&#xff08;RGB值&…...

质量体系的重要

质量体系是为确保产品、服务或过程质量满足规定要求&#xff0c;由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面&#xff1a; &#x1f3db;️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限&#xff0c;形成层级清晰的管理网络&#xf…...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 &#xff08;部分有免费额度&#x…...

土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等

&#x1f50d; 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术&#xff0c;可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势&#xff0c;还能有效评价重大生态工程…...

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

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

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)

在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马&#xff08;服务器方面的&#xff09;的原理&#xff0c;连接&#xff0c;以及各种木马及连接工具的分享 文件木马&#xff1a;https://w…...