第3章 数据和C
目录
- 3.1 示例程序
- 3.2 变量与常量数据
- 3.3 数据:数据类型关键字
- 3.4 C数据类型
- 3.4.1 int类型
- 3.4.2 其它整数类型
- 3.4.3 使用字符:char类型
- 3.4.4 _Bool类型
- 3.4.5 可移植的类型:inttypes.h
- 3.4.6 float、double和long double类型
- 3.4.7 复数和虚数类型
- 3.4.8 其它类型
- 3.4.9 类型大小
- 3.5 使用数据类型
- 3.6 参数和易犯的错误
- 3.7 另一个例子:转义序列
- 3.11 编程练习
3.1 示例程序
3.2 变量与常量数据
有些数据可以在程序使用之前预先设定并在整个运行过程中没有变化,这称为 常量;另外的数据在运行过程中可能变化或被赋值,这称为 变量。变量与常量的区别在于,变量的值可以在程序执行过程中变化与指定,而常量不可以。
3.3 数据:数据类型关键字
- 计算机需要一种方法来区分和使用这些不同的类型。如果是常量数据,
- (1)将“编译器”标识出来是因为, 以上是书写源码时这么区分数据类型,编译器以同样方式识别数据的类型,然后编译成汇编码
- (2)在汇编码中区分数据类型,主要区分整型和浮点型数据, 是通过寄存器。整型数据存到通用寄存器(%rax%eax),用常用指令处理;浮点型数据存到SSE 寄存器(类似%xmm0),通过SSE指令处理。
- (3) 在二进制目标文件中,整数和浮点数的区别,在于它们的存储方式的不同。浮点数表示法将一个数分为小数部分和指数部分分别存储。
因为任何区间比如(1.0和2.0)之间都有无穷多个实数,所以计算机浮点数不能表示区域内的所有值。浮点数往往只是实际值的近似
。
编译器
一般通过其书写来辨认其类型,比如:42是整数,而42.00是浮点数。变量则需要在声明语句中指明类型。 - 术语位、字节、字的简单概述
- (1)位是计算机存储的基本单位。
- (2) 字节是常用的计算机存储单位。也是内存最小寻址单位。几乎对于所有机器,1个字节均为8位。 C语言中对“字节”的定义有些区别。C语言把一个字节定义为char类型所用的位数。char类型所用的位数又由计算机采用的字符集决定。我们通常都是支持ASCII字符集,char只需8位就能表示该字符集,那么1字节=8位;有些字符集需要16位或32位才能表示,那么1字节=16位或32位。一般我们默认1字节=8位,C语言注意一下即可,不知道涉及其它国家字符编程时会不会因为没注意这个细节导致错误。
- (3)对于一种给定的计算机设计中,字是自然的存储单位。 “字”(Word)的位数取决于具体的硬件架构和上下文,字的位数随着科技的发展,硬件的更新在变化。
3.4 C数据类型
3.4.1 int类型
ISO/ANSI C规定int类型值的最小范围是-32768到32767(16位表示范围)。C标准对各种数据类型的规定都是一个最小取值范围,一个数据类型具体的字节数量还要看硬件平台、操作系统、编译器的实现。硬件平台的编译器,编译时为数据类型分配该平台支持的类型大小。
- 一、声明int变量
- 二、初始化变量
- 三、int类型常量 C把不含小数点和指数的数当作整数,把大多整数常量看作int类型。如果整数特别大,则有不同的处理。
- 四、打印int值 必须确保格式说明符的数目同待打印值得数目相同。打印时以格式说明符得数目为准,格式说明符只有一个,那就打印一个,即使还有待打印值,也不打印;格式说明符不止一个,待打印值只有一个,那么会打印内存中得任意值。参考printf()函数。
- 五、八进制和十六进制 书写时前缀0(零),表示用八进制,前缀0x或0X表示使用十六进制。
- 六、显示八进制和十六进制 C允许用3种进制书写数字,也允许以这三种进制显示数字。要用八进制而不是十进制显示整数,用%o代替%d,要显示十六进制整数,请用%x。如果想显示C语言前缀,可以使用说明符%#o、%#x或%#X分别生成0、0x和0X前缀。
3.4.2 其它整数类型
- C提供3个复数关键字修饰基本的整数类型:short、long和unsigned。以下几点简单说明:
- (1)
C标准对这些整型数据只规定了最小取值范围,具体的字节数由实现决定
。 - (2)在C90标准中,还允许 unsigned long int(简写为unsigned long)和unsigned short int(简写为unsigned short)类型。C99又增加了unsigned long long int(简写为unsigned long long)类型。
- (3)关键字signed可以和任何有符号类型一起使用,它使数据的类型更加明确。
-
一、声明其他整数类型
-
二、使用多种整数类型的原因
- 在long类型大于int类型的系统中,使用long类型会减慢计算,所以没有必要时不要使用long类型。如果在long类型等于int类型的系统中编写代码,当确实需要32位整数时,应使用long类型(而不是int类型),以便使程序被移植到16位机器上后仍然可以正常工作。
- 使用short类型可以节省存储空间。只有当程序使用了使系统可用内存很紧张的较大整数数组时,节省存储空间才是重要的。
- 使用short类型的另一个原因是计算机中的一些硬件寄存器是16位的。
-
三、long常量和long long常量
- 常量通常被视为int类型。如果值过大,编译器会适用unsigned int,如果不够大,编译器会依次试用long、unsigned long、long long和unsigned long long类型。
- 如果希望把一个较小的常量作为long类型对待,可以使用l(小写L)或L后缀 。l和L后缀对八进制和十六进制数同样适用。
- 支持long long类型的系统中,可以使用ll或LL后缀标识long long类型值。u或U后缀用于标识unsigned long long类型值,比如5ull、10LLU。
-
四、打印short、long、long long和unsigned类型数
- 尽管C中常量后缀可以使用大写和小写,但格式说明符只能使用小写字母。
- short类型变量作为参数传递时,会自动转换为int类型传递。因为int类型被认为是计算机处理起来最方便有效的整数类型,所以在short类型和int类型长度不同的系统中,使用int类型值进行参数传递的速度最快。
- 在C语言中,八进制和十六进制本身只是整型数据的表示方式,它们可以用于表示有符号(signed)和无符号(unsigned)整型数据,但具体解释方式取决于变量的类型和上下文使用。
- 字面值默认是有符号的(除非加 U 后缀)。
- 格式说明符(如 %o、%x)在输出时按无符号解释数据(负数的补码会被直接显示)。
- 在赋值或计算时,符号性由变量类型决定。
常用十进制整型数据打印格式说明符:
有符号整型 | 格式说明符 | 无符号整型 | 格式说明符 |
---|---|---|---|
int | %d | unsigned | %u |
short | %hd | unsigned short | %hu |
long | %ld | unsigned long | %lu |
long long | %lld | unsigned long long | %llu |
3.4.3 使用字符:char类型
C把一个字节定义为char类型所用的位数。char类型所用的位数,由该系统支持的字符集决定。如果支持的是ASCII码字符集,8位就可以表示,则1字节=8位。如果支持的字符集需要16位或32位表示,则认为1字节=16位或32位。注意以上只是C语言标准对C的规定,我们通常都认为1字节=8位。大部分都是支持ASCII码的,不知道在其他国家的C开发中,有没有因为C标准对字节的规定,需要对char、字节特殊处理的。
- 一、声明char变量
- 二、字符常量及其初始化 C将字符常量视为int类型而非char类型。例如 char grade='B’中,'B’作为数值66存储在一个32位单元中,而赋值后的grade则把66存储在一个8位单元中。
- 三、非打印字符
- C提供的表示字符的三种方法:
- 第一种:使用ASCII码。 char beep= 7;
- 第二种:使用特殊的符号序列,即转义序列。char nerf=‘\n’;
“\0oo和\xhh”是ASCII码的专用表示方法
。 - 第三种:
从C90开始,C提供了
第三种选择,即使用十六进制形式表示字符常量。char name=‘\x41’;
- C提供的表示字符的三种方法:
- 四、打印字符 打印时的格式说明符%c
- 五、有符号还是无符号 根据C90标准,C允许在关键字char前使用signed和unsigned。无论默认的char类型是什么,signed char是有符号类型,而unsigned char则是无符号类型。
3.4.4 _Bool类型
_Bool类型由C99引入,用于表示布尔值,即逻辑值true与false。因为C用值1表示true,用值0表示false,所以_Bool类型实际上也是一种整数类型。
3.4.5 可移植的类型:inttypes.h
- C语言中对整数类型规定了一个最小值的范围,比如,知道一个变量是int类型并不能告诉我们它有多少位。C标准对int类型规定了最小取值范围-32768到32767(16位表示范围)。根据硬件平台和系统的不同,对整数类型的实现位数也是不同的。如果你想了解一个硬件平台相关类型的具体位数,可以查看系统文档。
- C99标准引入了inttypes.h头文件。该头文件通多关键字typedef创建一些类型:确切长度类型(形如:uint32_t)、最小长度类型(形如:int_least8_t)、最快最小长度类型(形如:int_fast8_t)。这些类型提供了更直观的位数,增强了代码可移植性。实现这些类型会根据硬件平台和系统的不同(比如,不同的平台基本类型int有些是16,有些是32位),而不同。
- 编译器厂商会依据开发的编译器适用平台的不同、实现C标准的不同,进而对自己包含的inttypes.h头文件中实现类型的方法微调,但是对外的接口是一致的(不同编译器厂商的inttypes.h中创建的类型的名字是一致的,可能实现这些类型采用的基本类型会不同,比如int32_t有些用int实现,有些用long实现)。
3.4.6 float、double和long double类型
- C标准对float、double和long double类型的规定:
- (1) C标准规定,float类型必须至少能表示6位有效数字,取值范围至少位10-37到10+37。通常,系统使用32位存储一个浮点数。其中8位用于表示指数及其符号,24位用于表示非指数部分(称为位数或有效数字)及其符号。
- (2) C标准规定,double类型和float类型具有相同的最小取值范围要求,但它必须至少能表示10位有效数字。一般,double使用64位而不是32位长度。一些系统将多出的32位全部用于尾数部分,增加了数值的精度并减小舍入误差。其他一些系统将其中的一些位分配给指数部分,以容纳更大的指数,增加可以表示的数的范围。每种分配方法都使数值至少具有13位有效数字,超出了C的最小标准规定。
- (3)C提供了第三种浮点类型long double类型。 C只保证long double类型至少同double类型一样精确。
- 一、声明浮点变量
- 二、浮点常量
- 书写浮点常量有多种选择。一个浮点常量最基本的形式是:包含小数点的一个带符号的数字序列,接着是字母e或E,然后是代表10的指数的一个有符号值。可以省略正号。可以没有小数点(2E5)或指数部分(19.28),但是不能同时没有二者(整型常量才同时没二者)。可以省略小数部分(3.E16)或整数部分(.45E-6),但是二者不能同时省略(那样做会什么也不会剩下)。
- 浮点常量中不要使用空格。形如:1.56 E+12 是错位的。
- 默认情况下,编译器将浮点常量当作double类型。可以通过f或F后缀使编译器把浮点常量当作float类型,l或L后缀使一个浮点常量成为long double类型。建议使用L,l和1容易混淆。
- C99为表示浮点常量新添加了一种十六进制格式。这种格式使用前缀0x或0X,接着是十六进制数字,然后是p或P(而不是e或E),最后是2的指数(而不是10的指数),如下表示:0xa.1fp10
- 三、打印浮点值
- printf()函数使用%f格式说明符打印十进制计数法的float和double数字,用%e打印指数计数法的数字。如果系统支持C99的十六进制格式浮点数,用%a或%A打印。打印long double类型的浮点数需要%Lf、%Le和%La说明符。
- 注意float和double类型的输出都使用%f、%e或%a说明符。这时由于当它们向那些未在原型中显示说明参数类型的函数(如printf())传递参数时,C自动将float类型的参数转换为double类型。
- 四、浮点值的上溢和下溢
- 当计算结果是一个大得不能表达的数时,会发生上溢。对这种情况得反应原来没规定,但是现在得C语言要求为toobig赋予一个代表无穷大得特殊值,printf()函数显示此值为inf或infinity(或这个含义的其他名称)。
- 对浮点数可表示精度范围内最小的值,除以2,这个操作将使指数部分减小,但是指数已经达到最小值,所以计算机只能将尾数部分的位进行右移,空出首位二进制位,并丢弃最后一位二进制值,此过程称为下溢。C将损失了类型精度的浮点值称为低于正常的(subnormal),所以把最小的正浮点数除以2将得到一个低于正常的值。
如果除以一个足够大的值,将使所有的位都位0。现在C库提供了用于检查计算是否会产生低于正常的值的函数
。
3.4.7 复数和虚数类型
简单的讲有三种复数类型,分别是float_Complex、double_Complex和long double_Complex。有3种虚数类型,分别是float_Imaginary、double_Imaginary和long double_Imaginary。
3.4.8 其它类型
C没有字符串类型,但是它可以很好的处理字符串。C从基本类型中衍生出其他类型,包括数组、指针、结构和联合。
3.4.9 类型大小
C的内置运算符sizeof以字节为单位给出类型的大小。
3.5 使用数据类型
当为某个数值类型的变量进行初始化时,如果使用了其他类型的值,C会自动对该值进行类型转换以便和变量类型相匹配。一般都是对默认的常量类型进行隐式转换。
3.6 参数和易犯的错误
- C用逗号隔开函数调用中的多个参数。printf()和scanf()函数比较特殊,其参数数目可以不受限制,这两个函数通过第一个参数,确定后续参数的个数,方法是第一个参数字符串中的每个说明符对应后面的一个参数。
- 现在C通过一种函数原型机制检查函数调用是否使用了正确数目及类型的参数,但是这对printf()和scanf()函数不起作用,因为它们的参数数目是变化的。
- 使用%d显示float值,不会把该float值转换为近似的int值,而是显示垃圾值。与之类似,使用%f显示int值也不会把该int值转换为浮点值。这里与3.5节介绍的初始化时将一个double类型的浮点值常量截尾赋值给一个int类型变量的情况不同。3.5节初始化截尾的操作是编译器进行的,截尾后以整型数据保存到内存,自然也就可以以整型的形式打印,只是损失了精度,不会产生垃圾值;而这里是以浮点型数据保存进内存,再以整型数据打印,整型和浮点型数据在内存中结构完全不同,所以这里的打印会产生毫无作用的垃圾值。
3.7 另一个例子:转义序列
- C的一些专用转义字符。退格(\b)制表符(\t)回车符(\r)。通常,退格字符不删除退回时所经过的字符,但有些实现是删除的。
- printf()函数什么时候真正把输出传送给屏幕?首先,printf()语句将输出传递给一个被称为缓冲区的中介存储区域。缓冲区中的内容再不断地被传递给屏幕。
标准C规定在以下几种情况下将缓冲区内容传给屏幕:缓冲区满的时候、遇到换行符的时候以及需要输入的时候。将缓冲区内容传递给屏幕或文件称为刷新缓冲区
。
3.11 编程练习
前面的章节都是介绍基础知识的,所以编程练习很简单,个人觉得有价值的只有这章的第一个练习,其他的有手就行。
#include <stdio.h>
#include <float.h>
//#include <stdint.h>int main(void)
{float f_max=FLT_MAX;float f_min=FLT_MIN;printf("f_max %f %e\n",f_max,f_max); //float型浮点数的最大值/*乘10之后上溢,小数形式输出#INF00,指数形式输出#INF00e+000 C语言用INF表示上溢,无穷大*/printf("f_max*10 %f %e\n",f_max*10,f_max*10); // float型浮点数的最小值 小数形式输出0.000000 指数形式输出1.175494e-38printf("f_min %f %e\n",f_min,f_min); //除10后,开始下溢,C语言中下溢的过程是丢失精度的过程 小数形式输出0.000000 指数形式输出1.175494e-38printf("f_min/10 %f %e\n",f_min/10,f_min/10); //除以100,继续下溢 小数形式输出0.000000 指数形式输出1.175494e-40 下溢到一定的程度从规约数编程非规约数,最后内存中全0printf("f_min/100 %f %e\n",f_min/100,f_min/100);//除以100000,继续下溢 小数形式输出0.000000 指数形式输出1.175494e-40printf("f_min/100000 %f %e\n",f_min/100000,f_min/100000);//除以10000000,继续下溢 小数形式输出0.000000 指数形式输出1.401298e-45printf("f_min/10000000 %f %e\n",f_min/10000000,f_min/10000000);/*除以100000000,继续下溢 小数形式输出0.000000 指数形式输出0.000000e+000 此时下溢丢失精度到全零,下溢过程中前面几次,只有小数形式对float舍入输出0.000000,从指数形式来看内存中float占用的4字节中还有位是1下溢到此刻,精度全丢失,从指数形式的输出来看,我本来猜测应该内存中全为0了,但我通过指针打印出来的不是全为0,查deepseek得知:可以通过一直除,一直下溢到内存中全为0,通过循环实现,我这里就不写了*/printf("f_min/100000000 %f %e\n",f_min/100000000,f_min/100000000); //除以1000000000,继续下溢 小数形式输出0.000000 指数形式输出0.000000e+000printf("f_min/1000000000 %f %e\n",f_min/1000000000,f_min/1000000000);return 0;
}
我在写上面这段代码时,查阅了些资料,需要对浮点数的IEEE 754标准简单了解。浮点数在内存中的组成是:符号位、指数位和尾数位。尾数位决定了浮点数的精度,指数位决定了浮点数的范围。所谓上溢下溢就是超出了浮点数的表示范围,那就主要针对指数位来讨论这个问题。而且浮点数的上溢下溢讨论的都是浮点数绝对值的上溢下溢。负浮点数和正浮点数的上溢下溢是一样的
。
我在测试时很艰难的找到了浮点数边界值,参照整型的测试方式,让浮点值的最大值加0.1,但完全没变化。查了deepseek才参透了要针对指数位操作才能有明线变化,然后才有了乘10的操作,如果用加法就得加个很大的浮点数才行。有兴趣自己测吧。
浮点数出现上溢后指数位全1,这就是IEEE 754标准中的特殊值,C中用INF表示代表上溢无穷大。
下溢的本质:数值过小,超出规约数表示范围,被迫牺牲精度或归零。处理下溢的方式:非规约数(渐进下溢)或直接归零(FTZ),取决于硬件和配置。我们这里的处理方式就是采用非规约数,渐进式下溢,知道最后全为0。简单的或,下溢就是非规约数和规约数的界限。
- IEEE 754标准对浮点数的规范的一点理解:
- (1)浮点数可分为规约数(大部分浮点数都是)、非规约数(下溢,无线接近0)、特殊值(上溢INF无穷大)。
- (2)根据浮点数的指数位来区分属于哪种,指数位不全为0也不全为1是规约数,指数位全为0是非规约数,指数位全为1是特殊值。
- (3)浮点数的指数位用移码表示,float类型的浮点数,移码的偏移值为127, float类型的变量的最小指数是-126,得出的-126的方法是移码的最小值是1,1减去偏移值127就得到真实的float类型变量最小的指数-126。我原来认为是-128,因为补码比较常用,看到float类型的指数位共8位,补码方式能表示的最小值就是-128,习惯性认为就是-128了,要注意。
相关文章:
第3章 数据和C
目录 3.1 示例程序3.2 变量与常量数据3.3 数据:数据类型关键字3.4 C数据类型3.4.1 int类型3.4.2 其它整数类型3.4.3 使用字符:char类型3.4.4 _Bool类型3.4.5 可移植的类型:inttypes.h3.4.6 float、double和long double类型3.4.7 复数和虚数类…...
迁移学习:如何加速模型训练和提高性能
📌 友情提示: 本文内容由银河易创AI(https://ai.eaigx.com)创作平台的gpt-4-turbo模型生成,旨在提供技术参考与灵感启发。文中观点或代码示例需结合实际情况验证,建议读者通过官方文档或实践进一步确认其准…...
Kotlin zip 函数的作用和使用场景
1. zip 函数的作用 zip 是 Kotlin 集合操作中的一个函数,用于将两个集合按照索引一一配对,生成一个新的 List<Pair<T, R>> 集合。 作用:将两个集合的元素按位置组合成键值对(Pair)。返回值:一…...
通用分布式锁组件
Redisson的分布式锁使用并不复杂,基本步骤包括: 1)创建锁对象 2)尝试获取锁 3)处理业务 4)释放锁 但是,除了第3步以外,其它都是非业务代码,对业务的侵入较多&#x…...
FastDFS,分布式文件存储系统,介绍+配置+工具类
FastDFS 什么是分布式文件存储系统 随着文件逐渐增多,单台计算机已经存储不下这么多数据,需要用多台计算机存储不同的数据或进行备份,这样就需要有一个管理系统管理不同的计算机节点,这就是分布式管理系统。 使用分布式管理系统的…...
查询nvidia边缘设备的软硬件版本jetson_release
通过jetson_release命令可查询nvidia边缘设备的软硬件版本 nvidianvidia-desktop:~/leo/test_onnx$ jetson_release Software part of jetson-stats 4.2.12 - (c) 2024, Raffaello Bonghi Model: NVIDIA Orin Nano Developer Kit - Jetpack 5.1.1 [L4T 35.3.1] NV Power Mode[…...
[学习]RTKLib详解:ppp.c与ppp_ar.c
文章目录 RTKLib详解:ppp.c与ppp_ar.cPart A: ppp.c一、整体作用与工作流程二、核心函数说明1. pppos2. res_ppp3. tide_solid4. prectrop5. corrmeas6. udbias_ppp 三、数学原理补充四、代码特点 Part B: ppp_ar.c一、整体作用与工作流程分析二、函数功…...
ntdll!LdrpSnapThunk函数分析之LdrpNameToOrdinal函数返回之后得到函数地址
第一部分: OrdinalNumber LdrpNameToOrdinal( ImportString, ExportDirectory->NumberOfNames, DllBase, NameTableBase, …...
LeetCode 267:回文排列 II —— Swift 解法全解析
文章目录 摘要描述题解答案题解代码分析统计字符频率判断是否可能构成回文构建半边字符数组回溯生成半边排列 示例测试及结果时间复杂度空间复杂度实际使用场景:回文排列在真实项目里能干啥?文本处理、数据清洗类系统游戏开发:名字合法性验证…...
【渗透测试】命令执行漏洞的原理、利用方式、防范措施
文章目录 命令执行漏洞的原理、利用方式、防范措施一、原理**1. 定义与触发条件****2. 攻击链流程图** 二、利用方式**1. 利用手法与分类**(1) 系统命令注入(2) 代码执行漏洞(3) 框架漏洞利用 **2. 案例** 三、防范措施**1. 输入过滤与验证****2. 禁用危险函数****3. 安全开发*…...
旧版谷歌浏览器Chrome v116.0.5845.141下载
63位和32位均有: https://bbs.pcbeta.com/forum.php?modviewthread&tid1978299 https://www.31du.cn/open/google-chrome-v116-0-5845-141.html v116.0.5845.141的win32位版本: https://www.cr173.com/soft/435106.html v116.0.5845.97版本&…...
行业洞察| 当大模型开始协同工作:多智能体系统的崛起与挑战
你有没有想过,如果一群AI智能体拉了个工作群,它们会聊些什么? 程序员AI:“这段代码我来写!” 产品经理AI:“需求还没说完呢!” 辩论家AI:“我觉得这个方案不行!” 吃瓜…...
The Action Replay Process
Preface A commonly used inequality − x > ln ( 1 − x ) , 0 < x < 1 -x > \ln(1 - x), \quad 0 < x < 1 −x>ln(1−x),0<x<1 Proof: Let f ( x ) ln ( 1 − x ) x f(x) \ln(1 - x) x f(x)ln(1−x)x, for 0 < x < 1 0 < …...
Python基于Django的病人信息管理系统及安全策略分析(附源码,文档说明)
博主介绍:✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇dz…...
YOLOv1:开创实时目标检测新纪元
一、引言 在计算机视觉领域,目标检测一直是重要的研究方向,广泛应用于自动驾驶、安防监控、智能机器人等场景。2016年,Joseph Redmon等人提出的YOLO(You Only Look Once)v1模型,以其端到端、单阶段、实时性…...
【今日三题】跳台阶扩展问题(找规律) / 包含不超过两种字符的最长子串 / 字符串的排列(回溯—全排列)
⭐️个人主页:小羊 ⭐️所属专栏:Linux 很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~ 目录 跳台阶扩展问题(找规律)包含不超过两种字符的最长子串(字符串哈希)字符串的排列(回溯—全排列) 跳台阶扩展问题(找规律) 跳台阶扩…...
MySQL 中常见的日志
1. MySQL 中常见的日志有哪些? MySQL 主要包含以下几种日志: 错误日志(Error Log):记录 MySQL 服务器的启动和停止过程中的信息,以及运行过程中出现的错误或警告信息。默认情况下,错误日志文件…...
ubuntu nobel + qt5.15.2 设置qss语法识别正确
问题展示 解决步骤 首选项里面的高亮怎么编辑选择都没用。如果已经有generic-highlighter和css.xml,直接修改css.xml文件最直接! 在generic-highlighter目录下找到css.xml文件,位置是:/opt/Qt/Tools/QtCreator/share/qtcreator/…...
线程池技术
线程池基本概念 线程池就是在任务还没有到来前,预先创建一定数量的线程放入空闲列表。这些线程都是处于阻塞状态,不消耗CPU,但占用较小的内存空间。 当新任务到来时,缓冲池选择一个空线程,把任务传入此线程中运行&…...
matlab App自动化安装和卸载
这个是文件mlappinstall安装和卸载的使用函数,并且包括运行函数。File must be a toolbox file (*.mlappinstall) Package and Share Apps — Functions matlab.apputil.createCreate or modify app project file interactively using the Package App dialog box…...
MATLAB技巧——命令行输入的绘图,中文是正常的,到了脚本(m文件)里面就变成乱码的解决方法
文章目录 文件编码(根本性措施)字体设置使用 sprintf 或 text 函数系统语言设置示例代码 使用mlx方法 总结 在 M A T L A B MATLAB MATLAB中,中文字符在命令行和脚本中的显示问题通常与字符编码设置有关。以下是一些可能导致中文乱码的原因及…...
使用OpenCV 和 Dlib 实现人脸融合技术
文章目录 引言一、技术概述二、环境准备三、关键代码解析1. 人脸关键点定义2. 获取人脸掩模3. 计算仿射变换矩阵4. 检测并提取人脸关键点5. 颜色校正 四、完整流程五、效果展示六、总结 引言 本文将介绍如何使用Python、OpenCV和dlib库实现人脸融合技术,将一张人脸…...
Codeforces Round 1022 (Div. 2)
Problem - A - Codeforces 看这数据量,算出每个排列来,是不现实的,需要找找规律 来看找规律代码 #include <bits/stdc.h> using namespace std;int main() {int t;cin >> t;while (t--){int n;cin >> n;vector<int&g…...
uniapp 震动功能实现
项目场景: 提示:这里简述项目相关背景: 在项目中有时候需要一些功能,比如震动 描述 提示:这里描述项目中遇到的问题: 在移动应用中,震动反馈是提升用户体验的重要方式。uniapp 提供了两种震…...
uniapp 搭配 uCharts
在插件市场导入插件到项目中 <view class"charts-box-main"> <qiun-data-charts type"area" :opts"opts" :chartData"chartData" /> </view> data(&#…...
Kubernetes(k8s)学习笔记(八)--KubeSphere定制化安装
1执行下面的命令修改上一篇中yaml文件来实现定制化安装devops kubectl edit cm -n kubesphere-system ks-installer 主要是将devops几个配置由False改为True 然后使用下面的命令查看安装日志 kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l …...
阿里云codeup以及本地gitclone+http
cmd命令行乱码问题、解决 chcp 65001 git代码提交 git add . git commit -m init git push origin master...
Spring Boot 多数据源事务管理
在 Spring Boot 中,当需要操作多个数据源时,事务管理会变得更加复杂。因为默认的 DataSourceTransactionManager 只支持单数据源事务,跨数据源的事务需要使用 分布式事务(Distributed Transaction) 或 柔性事务&#x…...
4.系统定时器基本定时器
目录 系统定时器 系统定时器(systick)--内核 系统定时器结构 系统滴答定时器寄存器--内核 定时周期的确定公式 配置滴答定时器 系统定时器应用 应用1.定时器构造时间点任务,解决while循环阻塞问题 应用2.定时器构造精准的ms延时 应…...
lvgl多语言设置
搭建开发环境 安装node.js 安装node.js,点击进入官网地址 安装lv_i18n lv_i18n项目地址:Github:https://github.com/lvgl/lv_i18ngit运行命令安装lv_i18n:npm i lv_i18n -g。测试命令:lv_i18n -h 搭建过程报错 …...
ICode国际青少年编程竞赛—Python—4级训练场—复杂嵌套循环
ICode国际青少年编程竞赛—Python—4级训练场—复杂嵌套循环 icode练习时遇到卡顿没有思路时怎么办,题目也很难找到不会的那道题~针对这个问题,我们开发了通过“步数”、“积木行数”来快速定位到你不会的题目~ 题目会持续更新…...
【Windows】怎么解决Win 10家庭版WMI Provider Host占用CPU过高的问题?-篇一【2025.05.07】
本文面向两种用户,普通小白和windows开发程序员。 对于小白,目标就是阻止wmi对资源的高占用。解决方法有以下几步: 查出谁在调用这个wmiprvse.exe winR 组合键打开运行,输入命令services.msc,回车或确认。 找到如下蓝色…...
Matlab 多策略改进蜣螂优化算法及其在CEC2017性能
1、内容简介 Matlab214-多策略改进蜣螂优化算法及其在CEC2017性能 可以交流、咨询、答疑 2、内容说明 对蜣螂优化算法(Dung Beetle Algorithm,DBA)进行多种策略改进,以提高其在CEC2017基准测试中的表现。 蜣螂优化算法是一种仿…...
深度学习中常见的矩阵变换函数汇总(持续更新...)
1. 转置操作 (Transpose) 概念:将矩阵的行和列互换应用场景: 在卷积神经网络中转换特征图维度矩阵乘法运算前的维度调整数据预处理过程中的特征重排 原始矩阵 A [[1, 2, 3], 转置后 A^T [[1, 4],[4, 5, 6]] [2, 5],[3, 6]]代码…...
react+ts中函数组件父子通信方式
1. 父组件通过 Props 向子组件传递数据 这是最常见也是最基本的父子组件通信方式。父组件通过 props 将数据或回调函数传递给子组件。 示例代码: // 子组件接收来自父组件的数据 interface ChildProps {message: string; }const ChildComponent: React.FC<Chi…...
string--OJ3
链接: li1 #include <iostream> using namespace std;int main() {string a;getline(cin, a);cout << a.size() - a.find_last_of(" ")-1;{}}链接: li2 class Solution { public:bool isPalindrome(string s) {for (int i 0; i < s.size(); i){i…...
项目文档归档的最佳实践有哪些?
项目文档归档的最佳实践包括:明确归档标准与流程、使用集中式文档管理系统、实施严格的版本控制、定期审查与更新文档库。其中,明确归档标准与流程尤为关键,确保团队成员能统一理解并遵守文档管理规范。这包括明确文档命名规则、分类标准、归…...
C语言学习之字符函数和字符串函数
在C语言前面的内容中,我们学习到的库函数主要还是针对输入输出以及数字相关的内容,今天我们来学习一下有关于字符相关的函数,来对字符和字符串进行操作。 目录 字符分类函数 字符转换函数 以下的函数到strtok函数使用均需要包含头文件 st…...
自编码器(Autoencoder)
自编码器 是一种无监督学习的神经网络,主要用于数据的压缩和重构。它的核心思想是通过一个编码器将输入数据编码成一个低维表示(编码),然后再通过一个解码器将这个低维表示重构回原始数据。自编码器的目标是让重构后的数据尽可能…...
黄金分割法(0.618 法)
黄金分割法简介 黄金分割法属于区间缩小法,通过逐步缩小包含极值的区间长度,逼近极值点。在每一次迭代中,使用黄金分割点 0.618 将区间分为两部分,比较这两点处的函数值,舍弃较差区间,从而逐渐逼近最优解。…...
电商双11美妆数据分析实验总结
数据分析方法与应用 数据分类与绘图 数据分类方法:通过指定列名和函数(如SUM)来分类数据,确保数据集中包含所需列,否则会报错。 嵌套柱形图应用:嵌套柱形图用于展示多层次分类的数据,如按店名和…...
TB6600HG是一款PWM(脉宽调制)斩波型单芯片双极性正弦波微步进电机驱动集成电路。
该驱动器支持电机的正向和反向旋转控制,并具有多种激励模式,包括2相、1-2相、W1-2相、2W1-2相和4W1-2相。 使用这款驱动器,只需时钟信号即可驱动2相双极性步进电机,且振动小、效率高。 主要特点: 单芯片双极性正弦波…...
java每日精进 5.07【框架之数据权限】
数据权限,实现指定用户可以操作指定范围的数据。 数据权限不支持指定用户只能查看数据的某些字段; 权限可以分成三类:功能权限、数据权限、字段权限。 目前可以使用数据脱敏实现一定程度的字段权限控制; 1.数据权限实现步骤 1.1插…...
2:点云处理—3D相机开发
1.包含相机库目录 1.include D:\中科\Ainstec3DViewer\AinstecCamSDK\AinstecCamSDK_CPP\include 2.lib D:\中科\Ainstec3DViewer\AinstecCamSDK\AinstecCamSDK_CPP\lib\win 3.release D:\中科\Ainstec3DViewer\AinstecCamSDK\AinstecCamSDK_CPP\bin 4.示例程序 D:\中科\A…...
MySQL 中的 MVCC 是什么?
MySQL 中的 MVCC(Multi-Version Concurrency Control,多版本并发控制) 是一种用于实现高并发读写操作的机制,它通过维护数据的多个版本来解决读写冲突,从而在保证事务隔离性的同时,减少锁的使用,…...
JC/T 2187-2013 铝波纹芯复合铝板检测
铝波纹芯复合铝板是指以铝波纹板为芯材,双面粘接铝板的复合板材,如下图所示,铝波纹芯复合板具有轻质,环保,吸音,隔热,防火等性能,被广泛应用于机场,医院,体育…...
数字乡村综合管理与服务平台软件需求规格说明文档
数字乡村综合管理与服务平台 软件需求规格文档 文件版本:1.3 版本 文件状态:修改完成 文件作者:7组全体成员 完成日期:2025年5月7日 文章目录 a. 引言a.1 目的a.2 文档约定a.3 预期读者与涉众分析a.4 产品的范围a.5 参考文献…...
Linux常用命令33——sudo授权普通用户执行管理员命令
在使用Linux或macOS日常开发中,熟悉一些基本的命令有助于提高工作效率,sudo命令来自英文词组super user do的缩写,中文译为“超级用户才能干的事”,其功能是授权普通用户执行管理员命令。使用su命令变更用户身份虽然好用ÿ…...
Redis--哈希类型
目录 一、Hash 哈希 1.2 常用命令 1.2.1 HSET 1.2.2 HGET 1.2.3 HEXISTS 1.2.4 HDEL 1.2.5 HKEYS 1.2.6 HVALS 1.2.7 HGETALL 1.2.8 HMGET 1.2.9 HLEN 1.2.10 HSETNX 1.2.11 HINCRBY 1.2.12 HINCRBYFLOAT 1.3 内部编码 一、Hash 哈希 几乎所有的主流编程语言都提…...
数据结构——排序(万字解说)初阶数据结构完
目录 1.排序 2.实现常见的排序算法 2.1 直接插入排序 编辑 2.2 希尔排序 2.3 直接选择排序 2.4 堆排序 2.5 冒泡排序 2.6 快速排序 2.6.1 递归版本 2.6.1.1 hoare版本 2.6.1.2 挖坑法 2.6.1.3 lomuto前后指针 2.6.1.4 时间复杂度 2.6.2 非递归版本 2.7 归并排序…...