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

【C语言】可移植性陷阱与缺陷(八): 随机数的大小

在C语言编程中,随机数的生成和使用是一个常见的需求。然而,由于不同平台上的C标准库实现可能存在差异,随机数的生成和使用也可能面临可移植性问题。本文将深入探讨C语言中随机数的大小与可移植性相关的陷阱与缺陷,并提供相应的解决建议。

 一、随机数大小的相关概念

1.1. 数据类型的影响

整数类型:C 语言中的整数类型如intshortlong等,它们的大小在不同平台上可能有所不同。例如,在某些 16 位平台上int可能是 2 字节,而在 32 位平台上int通常是 4 字节。这就导致了随机数的范围和精度受到影响。

示例

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {srand((unsigned int)time(NULL));int random_num = rand();short short_random_num = (short int)random_num;printf("Random number: %d, short random number: %d\n", random_num, short_random_num);return 0;
}

rand函数生成的随机数是一个int类型。如果将其赋值给short类型,可能会因为int的范围超出short的范围而导致截断。

浮点类型floatdouble类型也有不同的精度和范围。float通常是 32 位,而double是 64 位。在生成浮点数随机数时,不同平台的精度和范围差异会影响随机数的准确性。

示例

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
int main() {srand((unsigned int)time(NULL));double random_float = (double)rand() / (double)RAND_MAX;float float_random_float = (float)random_float;double result1 = pow(random_float, 3.0);double result2 = pow(float_random_float, 3.0);printf("Result with double: %lf, result with float: %lf\n", result1, result2);return 0;
}

random_floatdouble类型,float_random_floatfloat类型。由于floatdouble的精度不同,对它们进行相同的幂运算pow后,结果可能会有所差异。

1.2. 随机数生成函数的特性

rand函数rand函数返回一个在 0 到RAND_MAX之间的整数。RAND_MAX的值在不同平台上可能不同,这就导致了随机数的范围和分布在不同平台上有所差异。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {srand((unsigned int)time(NULL));int random_num = rand();printf("Random number: %d\n", random_num);return 0;
}

rand函数生成的随机数范围取决于RAND_MAX的值。在某些平台上RAND_MAX可能是 32767,而在其他平台上可能是更大的值。

自定义随机数生成函数:除了rand函数外,还有一些自定义的随机数生成函数。这些函数可能有不同的算法和特性,在不同平台上的表现也会有所不同。

示例

#include <stdio.h>
#include <stdlib.h>
#include <time.h>#define CUSTOM_RAND_MAX 255int custom_rand() {static int seed = 0;seed = (seed * 1103515245 + 12345) % (CUSTOM_RAND_MAX + 1);return seed;
}int main() {srand((unsigned int)time(NULL));int std_random_num = rand();int custom_random_num = custom_rand();printf("Standard random number: %d, custom random number: %d\n", std_random_num, custom_random_num);return 0;
}

custom_rand函数生成的随机数范围是 0 到CUSTOM_RAND_MAX,与rand函数的范围不同。

二、随机数大小的可移植性陷阱

2.1. 数据类型长度差异

平台间的差异:不同平台上的数据类型长度可能不同。例如,在 16 位平台上int可能是 2 字节,而在 32 位平台上int是 4 字节。这就导致了在不同平台上生成的随机数范围和精度不同。

示例

#include <stdio.h>
#include <stdlib.h>
#include <time.h>int main() {srand((unsigned int)time(NULL));int random_num = rand();// 在16 - bit平台上,random_num可能会超出short int范围short short_random_num = (short int)random_num;printf("Random number: %d, short random number: %d\n", random_num, short_random_num);return 0;
}

random_numint类型,在 16 位平台上可能会超出short类型的范围。

代码移植的问题:当将代码从一个平台移植到另一个平台时,由于数据类型长度的差异,可能会导致随机数的大小和范围发生变化。

示例

#include <stdio.h>
#include <stdlib.h>
#include <time.h>//假设在32 - bit平台上运行
int main() {srand((unsigned int)time(NULL));int random_num = rand();//将代码移植到16 - bit平台short short_random_num = (short int)random_num;printf("Random number: %d, short random_num: %d\n", random_num, short_random_num);return 0;
}

random_num在 32 位平台上生成的范围可能超出了 16 位平台上short类型的范围。

2.2. 随机数生成函数的特性

函数实现的差异:不同平台上的随机数生成函数可能有不同的实现方式。例如,某些平台上的rand函数可能采用了特定的算法来生成随机数,而其他平台上的rand函数可能有不同的算法。

示例

#include <stdio.h>
#include <stdlib.h>
#include <time.h>//假设在平台A上
int custom_rand() {static int seed = 0;seed = (seed * 1103515245 + 12345) % 1000;return seed;
}//假设在平台B上
int custom_rand_b() {static int seed = 0;seed = (seed * 987654321 + 9876) % 2000;return seed;
}int main() {srand((unsigned int)time(NULL));int random_num = custom_rand();int random_num_b = custom_rand_b();printf("Random number on platform A: %d\n", random_num);printf("Random number on platform B: %d\n", random_num_b);return 0;
}

custom_randcustom_rand_b是两个不同平台上的自定义随机数生成函数,它们的算法和生成范围不同。

函数调用的影响:在不同平台上调用随机数生成函数时,可能会受到不同的环境因素影响。例如,系统时钟、种子值等因素可能会影响随机数的生成。

示例

#include <stdio.h>
#include <stdlib.h>
#include <time.h>int main() {srand((unsigned int)time(NULL));int random_num = rand();//在不同平台上,种子值可能不同srand((unsigned int)time(NULL));int random_num_2 = rand();printf("Random number: %d\n", random_num);printf("Random number 2: %d\n", random_num_2);return 0;
}

 两次调用rand函数时,种子值可能不同,导致生成的随机数不同。

2.3. 随机数分布的不一致性

rand()函数生成的随机数通常具有均匀分布,但不同平台上的实现可能略有差异。此外,如果随机数用于模拟特定概率事件,那么这种差异可能会影响模拟结果的准确性。

示例:

#include <stdio.h>
#include <stdlib.h>int main() {int count[10] = {0}; // 统计0-9出现的次数for (int i = 0; i < 1000; i++) {int randomDigit = rand() % 10; // 生成0-9之间的随机数count[randomDigit]++;}// 打印统计结果for (int i = 0; i < 10; i++) {printf("%d: %d\n", i, count[i]);}return 0;
}

虽然rand() % 10应该生成0到9之间的均匀分布随机数,但不同平台上的rand()实现可能会导致统计结果略有差异。

2.4. 浮点数表示差异

对于浮点数随机数,不同平台上浮点数的精度和表示范围是不同的。C 语言中的floatdouble类型遵循 IEEE 754 标准,但具体的实现细节可能导致有效数字位数、指数范围等方面的差异。当生成浮点数随机数并进行计算时,这些差异可能导致结果在不同平台上不一致。

示例:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
int main() {srand((unsigned int)time(NULL));double random_float = (double)rand() / (double)RAND_MAX;float float_random_float = (float)random_float;double result1 = pow(random_float, 3.0);double result2 = pow(float_random_float, 3.0);printf("Result with double: %lf, Result with float: %lf\n", result1, result2);return 0;
}

先生成了一个double类型的随机数,然后将其转换为float类型。由于floatdouble的精度和表示范围不同,对它们进行相同的幂运算(pow函数)后,得到的结果可能在不同平台上有较大差异。

三、解决随机数大小可移植性问题的方法

3.1. 使用固定长度的数据类型

选择合适的数据类型:在编写代码时,应选择固定长度的数据类型,如<stdint.h>中的int32_tuint32_t。这样可以确保在不同平台上数据类型的长度和范围一致。

示例

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <stdint.h>int main() {srand((unsigned int)time(NULL));int32_t random_num = (int32_t)rand();printf("Random number: %d\n", random_num);return 0;
}

3.2. 统一随机数生成函数

使用标准库函数:在编写代码时,应使用标准库函数来生成随机数。例如,rand函数在不同平台上都有统一的实现方式。

示例

#include <stdio.h>
#include <stdlib.h>
#include <time.h>int main() {srand((unsigned int)time(NULL));int random_num = rand();printf("Random number: %d\n", random_num);return 0;
}

rand函数是标准库函数,在不同平台上都能保证其生成随机数的一致性。

自定义随机数生成函数:如果需要自定义随机数生成函数,应确保其在不同平台上的实现方式一致。

示例

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define CUSTOM_RAND_MAX 1000int custom_rand() {static int seed = 0;seed = (seed * 1103515245 + 12345) % (CUSTOM_RAND_MAX + 1);return seed;
}int main() {srand((unsigned int)time(NULL));int random_num = custom_rand();printf("Random number: %d\n", random_num);return 0;
}

custom_rand函数在不同平台上都能保证其生成随机数的一致性。

3.3. 考虑平台特性

了解平台差异:在编写代码时,应了解不同平台的特性和差异。例如,不同平台上的数据类型长度、随机数生成函数的实现方式等。

示例

#include <stdio.h>
#include <stdlib.h>
#include <time.h>//假设在平台A上
int custom_rand() {static int seed = 0;seed = (seed * 1103515245 + 12345) % 1000;return seed;
}//假设在平台B上
int custom_rand_b() {static int seed = 0;seed = (seed * 987654321 + 9876) % 2000;return seed;
}int main() {srand((unsigned int)time(NULL));int random_num = custom_rand();int random_num_b = custom_rand_b();//了解平台差异if (sizeof(int) == 4) {printf("Platform A is 32 - bit\n");} else {printf("Platform B is not 32 - bit\n");}return 0;
}

针对平台特性进行优化:根据平台特性,对代码进行优化。例如,在不同平台上选择合适的随机数生成函数和数据类型。

示例

#include <stdio.h>
#include <stdlib.h>
#include <time.h>//假设在平台A上
int custom_rand() {static int seed = 0;seed = (seed * 1103515245 + 12345) % 1000;return seed;
}//假设在平台B上
int custom_rand_b() {static int seed = 0;seed = (seed * 987654321 + 9876) % 2000;return seed;
}int main() {srand((unsigned int)time(NULL));if (sizeof(int) == 4) {int random_num = custom_rand();printf("Random number on platform A: %d\n", random_num);} else {int random_num = custom_rand_b();printf("Random number on platform B: %d\n", random_num);}return 0;
}

根据平台特性选择合适的随机数生成函数。

3.4. 其它处理建议

  • 如果需要更精确的随机数分布,考虑使用更高质量的随机数生成器。
  • 对于模拟特定概率事件,可以使用专门的统计测试来验证随机数生成器的分布是否符合预期。
  • 在跨平台应用中,对随机数生成器的输出进行充分的测试和验证,以确保其在所有平台上都能产生一致的结果。
  • 了解目标平台上浮点数的精度和范围,通过查看<float.h>中的相关宏(如FLT_MANT_DIGDBL_MANT_DIG等)来获取信息。
  • 在对浮点数随机数进行计算时,考虑精度损失的可能性。
  • 对于要求高精度的计算,可以考虑使用高精度数学库或者自定义高精度的浮点数运算函数。
  • 在比较浮点数随机数时,避免直接使用==运算符,而是采用比较差值是否小于某个精度阈值的方式,如if (fabs(random_float1 - random_float2) < precision),其中precision是根据精度要求设定的差值阈值。

四、总结

综上所述,C语言中的随机数生成和使用面临诸多可移植性问题。这些问题源于不同平台上的C标准库实现差异、整数类型大小不一致性以及随机数范围的不确定性。为了解决这些问题,需要了解平台特性、使用固定宽度的整数类型、检查整数溢出、使用更好的随机数生成器以及进行充分的测试和验证。通过这些措施,可以编写更加健壮和可移植的C语言代码来处理随机数的大小和分布。

相关文章:

【C语言】可移植性陷阱与缺陷(八): 随机数的大小

在C语言编程中&#xff0c;随机数的生成和使用是一个常见的需求。然而&#xff0c;由于不同平台上的C标准库实现可能存在差异&#xff0c;随机数的生成和使用也可能面临可移植性问题。本文将深入探讨C语言中随机数的大小与可移植性相关的陷阱与缺陷&#xff0c;并提供相应的解决…...

SSL VPN

SSL VPN 是什么&#xff1f; 是采用SSL/TLS协议来实现远程接入的一种轻量级 VPN 技术。利用 SSL 协议提供的基于证书的身份认证、数据加密和消息完整性验证机制&#xff0c;可以为应用层之间的通信建立安全连接。因为 SSL 协议内置于浏览器中&#xff0c;使用 SSL VPN 可以免于…...

C语言:函数

目录 1.函数的解释 2.C语言函数的分类 2.1库函数 2.2自定义函数 2.2.1自定义函数的语法格式 2.2.2自定义函数的实践 (1)第一题&#xff1a;欢迎光临 (2)第二题 打印数字的平方 ​编辑 (3)第三题 计算和 3.函数的参数 3.1值传递的表现 --- 形参 3.2地址传递的表现 -…...

Vue 环境配置与项目创建指南

1. 前置要求 在开始配置 Vue 开发环境之前&#xff0c;需要确保以下工具已安装&#xff1a; Node.js&#xff1a;Vue 的构建工具依赖 Node.js。 npm 或 yarn&#xff1a;Node.js 自带 npm 包管理工具&#xff0c;也可以选择安装 yarn。 安装 Node.js 前往 Node.js 官网 下…...

关于物联网的基础知识(三)——物联网技术架构:连接万物的智慧之道!连接未来的万物之网!

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///计算机爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于物联网的基础知识&#xff08;三&a…...

iOS - Tagged Pointer

1. 基本结构 // Tagged Pointer 的内存布局 union TaggedPointer {uintptr_t bits; // 完整的指针值struct {uintptr_t data : 60; // 数据部分uintptr_t tag : 4; // 类型标记};// 扩展类型struct {uintptr_t extData : 52; // 扩展数据uintptr_t extTag : …...

基于SpringBoot的音乐网站与分享平台

基于SpringBoot的音乐网站与分享平台 摘要1. 研究背景2.研究内容3.系统功能 3.1前台首页功能模块3.2在线听歌功能模块3.3后台登录功能模块3.4在线听歌管理模块 4.部分功能代码实现5.源码分享(免费获取) 需要源码联系我即可(免费获取)~ ??大家点赞、收藏、关注、评论啦 、查…...

【机器学习篇】 科技异次元的超强 “魔杖”,开启奇幻新程

一起开启这场旅行吧&#xff0c;关注博主&#xff0c;点赞支持不迷路&#xff0c;下面一同欣赏本篇的美妙吧&#xff01;&#xff01; &#xff01; 博主主页&#xff1a; 羑悻的小杀马特.-CSDN博客 在当今科技飞速发展的时代&#xff0c;机器学习宛如一把来自科技异次元的超强…...

opencv CV_TM_SQDIFF未定义标识符

opencv CV_TM_SQDIFF未定义标识符 opencv4部分命名发生变换&#xff0c;将CV_WINDOW_AUTOSIZE改为WINDOW_AUTOSIZE&#xff1b;CV_TM_SQDIFF_NORMED改为TM_SQDIFF_NORMED。...

OneFlow的简单介绍

OneFlow 是北京一流科技有限公司旗下的采用全新架构设计的开源工业级通用深度学习框架。以下是关于 OneFlow 的详细介绍&#xff1a; 本篇文章的目录 特点 功能 应用场景 发展历程 特点 简洁易用的接口&#xff1a;为深度学习相关的算法工程师提供一套简洁易用的用户接口…...

如何配置【Docker镜像】加速器+【Docker镜像】的使用

一、配置Docker镜像加速器 1. 安装/升级容器引擎客户端​ 推荐安装1.11.2以上版本的容器引擎客户端 2. 配置镜像加速器​ 针对容器引擎客户端版本大于1.11.2的用户 以root用户登录容器引擎所在的虚拟机 修改 "/etc/docker/daemon.json" 文件&#xff08;如果没有…...

《OpenCV》——模版匹配

文章目录 什么是模版匹配&#xff1f;函数介绍实例 什么是模版匹配&#xff1f; 模板匹配是在一幅图像中寻找与另一幅模板图像最匹配部分的技术。OpenCV 提供了多种模板匹配的方法&#xff0c;它在目标检测、物体识别等众多计算机视觉任务中有广泛的应用。例如&#xff0c;你有…...

【网络安全技术与应用】(选修)实验3 网络侦察

一、实验目的 培养学生综合运用搜索引擎、Whois数据库等手段对目标站点进行侦查的能力,了解站点查询常用的信息源及搜索工具,熟练掌握常见搜索工具的功能及使用技巧。培养学生使用搜索引擎在互联网查找特定设备的能力,熟悉联网设备搜索引擎的功能,熟练掌握设备搜索引擎的使…...

基于XGBoost的集成学习算法

目录 一、XGBoost原理1.1 提升方法&#xff08;Boosting&#xff09;1.2 提升决策树 &#xff08;BDT&#xff09;1.3 梯度提升决策树 &#xff08;GBDT&#xff09;1.4 极限梯度提升&#xff08;XGBoost&#xff09;1.4.1 XGBoost改进1.4.2 XGBoostcsklearn实现1.4.3 XGBoost回…...

【84键矮轴无线键盘】个人使用经历

推荐&#xff1a; 前行者MK84键&#xff08;理由&#xff1a;价格实惠&#xff0c;键位布局好&#xff0c;其他都是可接受程度&#xff09;K3 max&#xff08;理由&#xff1a;除了短命的续航、脚垫容易脱落&#xff0c;已无明显短板&#xff09; 我需要一把在小巧、舒适的主力…...

基于Arduino的FPV头部追踪相机系统

构建FPV头部追踪相机&#xff1a;让你置身于遥控车辆之中&#xff01; 在遥控车辆和模型飞行器的世界中&#xff0c;第一人称视角&#xff08;FPV&#xff09;体验一直是爱好者们追求的目标。通过FPV头部追踪相机&#xff0c;你可以像坐在车辆或飞行器内部一样&#xff0c;自由…...

Flutter:邀请海报,Widget转图片,保存相册

记录下&#xff0c;把页面红色区域内的内容&#xff0c;转成图片后保存到相册的功能 依赖 # 生成二维码 qr_flutter: ^4.1.0 # 保存图片 image_gallery_saver_plus: ^3.0.5view import package:demo/common/index.dart; import package:ducafe_ui_core/ducafe_ui_core.dart; i…...

CSS——16. nth—child序列选择器1

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>nth-child选择器</title><style type"text/css">/* 选择的是li的父元素&#xff08;ul&#xff09;中的第9个li子元素 */li:nth-child(9){color: red…...

【HarmonyOS 5.0】从0到1开发购物应用App(二):登录页对接口

【HarmonyOS Arkts笔记】http网络请求封装 【HarmonyOS Arkts笔记】ohos.data.preferences用户首选项实现存储信息 登录页 点击登录按钮调用login()方法 import { promptAction, router } from kit.ArkUI; import loginApi from "../../api/login" import Prefere…...

asp.net core webapi中的数据注解与数据验证

在这一课中&#xff0c;主要讲解了如何在 Web API 中使用数据注解&#xff08;Data Annotations&#xff09;和进行数据验证&#xff0c;以确保请求数据的有效性和完整性。 在 Web API 中&#xff0c;数据验证是确保客户端传递的数据符合业务规则和格式要求的关键步骤。数据注…...

VulnHub—potato-suncs

使用命令扫描靶机ip arp-scan -l 尝试访问一下ip 发现一个大土豆没什么用 尝试扫描一下子域名 没有发现什么有用的信息 尝试扫描端口 namp -A 192.168.19.137 -p- 尝试访问一下端口,发现都访问不进去 查看源代码发现了网页的标题 potato&#xff0c;就想着爆破一下密码 hydr…...

uniapp 微信小程序 自定义日历组件

效果图 功能&#xff1a;可以记录当天是否有某些任务或者某些记录 具体使用&#xff1a; 子组件代码 <template><view class"Accumulate"><view class"bx"><view class"bxx"><view class"plank"><…...

云架构Web端的工业MES系统设计之区分工业过程

云架构Web端的工业MES系统设计之区分工业过程 在当今数字化浪潮席卷全球的背景下,制造业作为国家经济发展的重要支柱产业,正面临着前所未有的机遇与挑战。市场需求的快速变化、客户个性化定制要求的日益提高以及全球竞争的愈发激烈,都促使制造企业必须寻求更加高效、智能的生产…...

Harbor 仓库部署(docker-compose 部署方式)

一、 安装的前提条件 硬件 资源 最低 推荐 cpu2C4C内存4G8G硬盘40G160G 软件 软件 版本 描述 dockerv17.0.6-ce 安装参考官方文档 Install Docker Engine | Docker Documentation docker-composev1.18.0 安装参考官方文档 Overview | Docker Documentation Openssllatest…...

机器学习基础-支持向量机SVM

目录 基本概念和定义 1. 超平面&#xff08;Hyperplane&#xff09; 2. 支持向量&#xff08;Support Vectors&#xff09; 3. 线性可分 4. 边界 SVM算法基本思想和分类 基本思想 间隔最大化 间隔&#xff08;Margin&#xff09; 软边距 SVM 核函数的概念 基本概念…...

卸载wps后word图标没有变成白纸恢复

这几天下载了个wps教育版&#xff0c;后头用完了删了 用习惯的2019图标 给兄弟我干没了&#xff1f;&#xff1f;&#xff1f; 其他老哥说什么卸载关联重新下 &#xff0c;而且还要什么撤销保存原来的备份什么&#xff0c;兄弟也是不得不怂了 后头就发现了这个半宝藏博主&…...

mongodb==安装prisma连接

官网下载mongodb,解压安装 Download MongoDB Community Server | MongoDB 修改bin/mongod.cfg # mongod.conf# for documentation of all options, see: # http://docs.mongodb.org/manual/reference/configuration-options/# Where and how to store data. storage:dbPat…...

python代码实现了一个金融数据处理和分析的功能,主要围绕国债期货及相关指数数据展开

# 忽略某些模块的提示信息 import warnings warnings.filterwarnings("ignore") # 在全局配置中添加RQData账号信息 import rqdatac as rq from typing import List import pandas as pd import numpy as np import re from datetime import datetime, timedelta,tim…...

声音是如何产生的

一、音频概述 RTMP中一般音频采用aac编码&#xff0c;采样率为44100HZ, 每帧1024采样&#xff0c;帧率43&#xff0c;23.2ms一帧 RTC中一般音频采用opus编码&#xff0c;采样率为48000HZ&#xff0c;每帧480采样&#xff0c;帧率100&#xff0c;10ms一帧 通道数&#xff08;c…...

Matlab回归预测大合集(不定期更新)-188

截至2025-1-2更新 1.BP神经网络多元回归预测&#xff08;多输入单输出&#xff09; 2.RBF神经网络多元回归预测&#xff08;多输入单输出&#xff09; 3.RF随机森林多元回归预测&#xff08;多输入单输出&#xff09; 4.CNN卷积神经网络多元回归预测&#xff08;多输入单输…...

CUDA编程【7】 线程束

文章目录 线程束和线程块线程束线程块 线程束的分化问题线程束分化&#xff08;Warp Divergence&#xff09;线程束分化的执行机制如何避免线程束的分化 线程束和线程块 线程束 线程束是SM中基本的执行单元当一个网格被启动&#xff08;即一个核函数被启动&#xff09;&#…...

nodejs:nodejs的技巧有哪些(2)

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境&#xff0c;它允许开发者构建高性能的网络应用。 1. 使用异步编程&#xff0c;利用 async/await 来处理异步操作&#xff0c;使代码更清晰、易读。 const fetchData async () > { const data await getDataFrom…...

构建数字化校园:定义与意义

随着信息技术的快速发展&#xff0c;"数字化校园"这一概念逐渐成为教育领域内热议的话题。数字化校园是指利用先进的信息技术手段&#xff0c;如互联网、大数据、云计算等&#xff0c;对学校的教学、科研、管理和服务等方面进行全面升级和优化的过程。它不仅改变了传…...

LabVIEW语言学习过程是什么?

学习LabVIEW语言的过程可以分为几个阶段&#xff0c;每个阶段的重点内容逐步加深&#xff0c;帮助你从入门到精通。以下是一个简洁的学习过程&#xff1a; ​ 1. 基础入门阶段 理解图形化编程&#xff1a;LabVIEW是一种图形化编程语言&#xff0c;与传统的文本编程语言不同&am…...

阿里云 人工智能与机器学习

阿里云的 人工智能&#xff08;AI&#xff09;与机器学习&#xff08;ML&#xff09; 服务为企业提供了全面的AI解决方案&#xff0c;帮助用户在多个行业实现数据智能化&#xff0c;提升决策效率&#xff0c;推动业务创新。阿里云通过先进的技术和丰富的工具&#xff0c;支持用…...

NUTTX移植到STM32

STM32移植NUTTX 1. Ubuntu下搭建开发环境1.1 先决条件1.2 下载 NuttX1.3 使用Make 进行编译1.4 烧录运行 2.通过NUTTX点亮LED2.1 部署操作系统2.2 修改配置文件2.3 编译运行程序 开发板&#xff1a;DshanMCUF407 官方开发文档&#xff1a;安装 — NuttX latest 文档 参考文档&…...

.NET 9.0 WebApi 发布到 IIS 详细步骤

微软表示&#xff0c;.NET 9 是迄今为止性能最高的 .NET 版本&#xff0c;对运行时、工作负载和语言方面进行了 1,000 多项与性能相关的改进&#xff0c;并采用了更高效的算法来生成更好的代码。 .NET 9 是 .NET 8 的继任者&#xff0c;特别侧重于云原生应用和性能。 作为标准期…...

麒麟 kylin v10 server 升级openssh 9.9p1

准备升级工作 yum install gcc make perl zlib zlib-devel pam pam-devel备份原有的ssh目录&#xff0c;以备后用 cp -r /etc/ssh /etc/ssh.bak cp /etc/pam.d/sshd /etc/pam.d/sshd.before cp /etc/ssh/sshd_config /etc/ssh/sshd_config.before解压源码压缩包 tar -zxf o…...

ollama+FastAPI部署后端大模型调用接口

ollamaFastAPI部署后端大模型调用接口 记录一下开源大模型的后端调用接口过程 一、ollama下载及运行 1. ollama安装 ollama是一个本地部署开源大模型的软件&#xff0c;可以运行llama、gemma、qwen等国内外开源大模型&#xff0c;也可以部署自己训练的大模型 ollama国内地…...

设计模式 行为型 策略模式(Strategy Pattern)与 常见技术框架应用 解析

策略模式&#xff08;Strategy Pattern&#xff09;核心思想是将算法的实现从使用该算法的类中分离出来&#xff0c;作为独立的对象&#xff0c;通过接口来定义算法家族&#xff0c;这样就可以很容易地改变或扩展算法。通过这种方式&#xff0c;可以避免在客户端代码中使用大量…...

2025资源从哪里来!

方案规划告诉你资源最好的答案&#xff1f; 方案一、如果你不知道啥资源可以到这里面找到初步的答案&#xff1f; 哔哩哔哩 (゜-゜)つロ 干杯~-bilibili 在这个网站你可以找到你对应的专业-对应的路线-对应的资源-对应的百度网盘里面全是免费的资源------------------惊喜不&…...

Alist-Sync-Web 网盘自动同步,网盘备份相互备份

Alist-Sync-Web 一个基于 Web 界面的 Alist 存储同步工具&#xff0c;支持多任务管理、定时同步、差异处理等功能。 如果好用&#xff0c;请Star&#xff01;非常感谢&#xff01; GitHub Gitee DockerHub 功能特点 &#x1f4f1; 美观的 Web 管理界面&#x1f504; 支持多任…...

【FlutterDart】 listView.builder例子二(14 /100)

上效果图 上代码&#xff1a; import package:flutter/material.dart;class ListRoles extends StatelessWidget {ListRoles({super.key});final List<String> entries <String>[, -, *, /];final List<int> colorCodes <int>[600, 500, 100, 50];o…...

《shared_ptr源码剖析》

【shared_ptr导读】上一节&#xff0c;我们为大家介绍了unique_ptr的底层原理和实现。相对于unique_ptr&#xff0c;shared_ptr也是被大家广泛使用的智能指针&#xff0c;shared_ptr内部的原理是怎样的&#xff1f;shared_ptr是多线程安全的吗&#xff1f; 本文将以Centos标准库…...

关于markdown实现页面跳转(调查测试:csdn(博客编写效果、发布效果)、typroa中md转pdf的使用情况)

一-方法介绍 [点击跳转到标题0](#1) <a href"#2">正文2</a>### <span id"2">标题0</span>二、跳转测试区 点击跳转到标题0 正文2 三、测试结果 场景MDspan-可标题写博客时候&#xff0c;右侧显示区效果可以发布博客的效果可以…...

入门级容器技术解析:Docker和K8s的区别与关系

目录 &#x1f3af;学习小目标&#xff1a; 关于容器 传统物理机&#x1f5a5;️ 虚拟机&#x1f4bb; 为什么使用容器技术呢&#xff1f;&#x1f914; 容器技术&#x1f943; Docker—容器化平台 K8s(Kubernetes)—容器编排系统​ Docker和K8s有什么关系和区别&#…...

《Rust权威指南》学习笔记(五)

高级特性 1.在Rust中&#xff0c;unsafe是一种允许绕过Rust的安全性保证的机制&#xff0c;用于执行一些Rust默认情况下不允许的操作。unsafe存在的原因是&#xff1a;unsafe 允许执行某些可能被 Rust 的安全性检查阻止的操作&#xff0c;从而可以进行性能优化&#xff0c;如手…...

数据库软考历年上午真题与答案解析(2018-2024)

本题考查计算机总线相关知识。 总线&#xff08;Bus&#xff09;是计算机各种功能部件之间传送信息的公共通信干线&#xff0c;它是由导线组成的传输线束。 根据总线连接设备范围的不同&#xff0c; 分为&#xff1a;1.片内总线&#xff1a;芯片内部的总线&#xff1b; 2.系统…...

HTML5 文件上传(File Upload)详解

HTML5 文件上传&#xff08;File Upload&#xff09;详解 HTML5 提供了强大的文件上传功能&#xff0c;允许用户通过网页选择文件并上传到服务器。以下是关于文件上传控件的详细说明。 1. 基本的文件上传控件 使用 <input> 标签的 type"file" 属性可以创建一…...

构建属于你的七牛云文件上传工具:Qiniu Uploader 详解(从 0 到 1 实现)

GitHub 仓库地址&#xff1a;https://github.com/hahala2333/qiniu-upload &#x1f4da; 简介 在现代 Web 开发中&#xff0c;静态资源的上传和管理是不可避免的需求。为了简化将本地资源上传到七牛云存储的过程&#xff0c;我们构建了 Qiniu Uploader 工具。它具备灵活的配置…...