C语言从零到精通:常用运算符完全指南,掌握算术、逻辑与关系运算
系列文章目录
01-C语言从零到精通:常用运算符完全指南,掌握算术、逻辑与关系运算
文章目录
- 系列文章目录
- 前言
- 一、C语言的起源与应用领域
- 1.1 C语言的起源
- 1.2 C语言的应用领域
- 1.2.1 操作系统开发
- 1.2.2 嵌入式系统
- 1.2.3 编译器开发
- 1.2.4 游戏开发与图形处理
- 二、C语言的基本语法结构
- 2.1 程序的基本结构
- 2.1.1 头文件的引入
- 2.1.2 主函数(`main()`)
- 2.1.3 代码段与语句
- 2.2 注释的使用
- 2.3 标识符与关键字
- 2.3.1 标识符
- 2.3.2 关键字
- 三、数据类型、变量、常量的声明与使用
- 3.1 数据类型的基本分类
- 3.1.1 基本数据类型
- 3.1.2 衍生数据类型
- 3.1.3 空类型
- 3.2 变量的声明与使用
- 3.2.1 变量的声明
- 3.2.2 变量的初始化
- 3.2.3 变量的使用
- 3.3 常量的声明与使用
- 3.3.1 使用`#define`定义常量
- 3.3.2 使用`const`关键字定义常量
- 3.3.3 常量的应用场景
- 3.4 数据类型的类型转换
- 3.4.1 隐式类型转换
- 3.4.2 显式类型转换
- 四、基本运算符的使用
- 4.1 算术运算符
- 4.1.1 常见的算术运算符
- 4.1.2 示例代码
- 4.2 关系运算符
- 4.2.1 常见的关系运算符
- 4.2.2 示例代码
- 4.3 逻辑运算符
- 4.3.1 常见的逻辑运算符
- 4.3.2 示例代码
- 4.4 赋值运算符
- 4.4.1 常见的赋值运算符
- 4.4.2 示例代码
- 五、总结
前言
C语言,作为一门经典的编程语言,长期以来在计算机科学和软件开发领域占据着重要地位。无论是在操作系统、嵌入式系统,还是在大型应用程序开发中,C语言的强大功能和高效性让它始终保持活跃的生命力。对于每个程序员来说,掌握C语言的基础知识不仅是学习其他编程语言的坚实基础,也有助于提升解决问题的能力。
在本篇文章中,我们将深入探讨C语言中的基本运算符。运算符是C语言中最基础、最重要的组成部分之一,是程序员进行数据运算、条件判断以及逻辑控制的工具。无论你是初学者还是有一定经验的开发者,理解这些运算符的使用方式,能够让你更加得心应手地编写高效、可读的代码。通过本文,你将清晰地掌握算术、关系、逻辑等运算符的使用方法,并能够在实践中得以运用。
如果你正打算深入学习C语言,或者希望巩固编程基础,那么这篇文章将为你提供一个清晰且实用的指南。
一、C语言的起源与应用领域
1.1 C语言的起源
C语言的起源可以追溯到20世纪70年代。由Dennis Ritchie在美国贝尔实验室(Bell Labs)开发,C语言最初是作为Unix操作系统的编程语言而诞生的。Unix操作系统的开发要求有一种既能操作硬件又能处理高级任务的语言,而C语言恰好满足了这个需求。
C语言是从B语言发展而来的。B语言本身是在20世纪60年代由Ken Thompson开发的,它是一种结构化语言,但功能上比较简单,缺乏现代编程语言所具备的特性。Dennis Ritchie通过对B语言进行扩展,改进了其数据处理能力,增加了更多的数据类型和控制结构,从而形成了C语言的雏形。
C语言的一个显著特点就是它的“低级”特性。与其他高级编程语言相比,C语言允许开发者直接操作计算机的内存,进行底层硬件编程,这使得它成为开发操作系统、嵌入式系统、驱动程序等底层应用的首选语言。
1.2 C语言的应用领域
C语言的广泛应用可以追溯到其最初的目标——操作系统开发。随着C语言的不断发展,它不仅仅局限于操作系统开发,还扩展到各种其他领域。以下是C语言的几种典型应用:
1.2.1 操作系统开发
C语言最早被用来开发Unix操作系统,许多现代操作系统,包括Linux、macOS和Windows等,包含了大量的C语言代码。C语言能够直接访问硬件,支持指针操作,使得它在操作系统内核开发中发挥了重要作用。
1.2.2 嵌入式系统
C语言的高效性和可移植性使得它在嵌入式系统中得到了广泛的应用。嵌入式系统通常具有内存、存储和计算资源的限制,C语言的低级操作和对硬件的直接访问能力,使得它成为开发嵌入式设备(如智能家居、汽车电子、机器人控制系统等)的理想选择。
1.2.3 编译器开发
C语言本身是一种非常高效的编程语言,因此,许多其他编程语言的编译器(包括C语言自身的编译器)都是使用C语言编写的。通过C语言,开发者可以编写高效、跨平台的编译器,使得不同的编程语言可以在多种操作系统中运行。
1.2.4 游戏开发与图形处理
虽然C语言并非专为图形处理设计,但由于其高效的性能,许多早期的图形引擎、游戏开发平台等也是用C语言开发的。例如,著名的图形库OpenGL就是基于C语言开发的。此外,许多高效的游戏引擎也在某些部分使用C语言编写,特别是对于需要高性能计算的部分。
二、C语言的基本语法结构
2.1 程序的基本结构
C语言程序的基本结构是由多个模块组成的。每个C语言程序都至少包含以下几个部分:
- 头文件:包含程序所需的函数声明和宏定义。常见的头文件有
stdio.h
、stdlib.h
等。 - 主函数:每个C语言程序都必须有一个
main
函数,程序的执行从main
函数开始。 - 代码段:在
main
函数内或其他函数中,程序的逻辑代码被写成一系列的语句,执行程序的具体任务。
2.1.1 头文件的引入
头文件通常用于声明函数和定义常量,在C语言程序中使用#include
指令来引入头文件。最常见的头文件包括:
#include <stdio.h> // 引入标准输入输出库
#include <stdlib.h> // 引入标准库
引入头文件后,程序可以使用其中定义的标准函数,如printf()
和scanf()
,来进行输入输出操作。
2.1.2 主函数(main()
)
每个C程序都必须有一个main
函数。程序从main
函数开始执行,在main
函数结束时,程序终止。
int main() {// 程序的执行代码return 0;
}
2.1.3 代码段与语句
C语言程序的执行是由一系列语句组成的,语句是C语言的基本执行单元。每个语句通常以分号;
结尾。
例如:
int a = 5; // 声明并初始化变量a
a = a + 1; // 计算a的值
2.2 注释的使用
C语言提供了两种方式来注释代码,注释是用来解释代码,帮助其他开发者理解程序的功能和结构。C语言中的注释分为两种类型:
- 单行注释:使用
//
标识单行注释,注释从//
后开始,到行末结束。
// 这是一个单行注释
int a = 10; // 初始化变量a
- 多行注释:使用
/*
和*/
包围的部分表示多行注释,可以注释多行代码。
/*这是一个多行注释可以注释多行代码
*/
int b = 20;
注释不会影响程序的执行,它们的作用只是帮助程序员理解代码。
2.3 标识符与关键字
2.3.1 标识符
标识符是程序中用于标识变量、函数、数组等的名称。标识符由字母、数字和下划线_
组成,但必须以字母或下划线开头,不能以数字开头。
例如,int age
中的age
就是一个标识符。
2.3.2 关键字
C语言中有一组保留字,被称为“关键字”,它们是语言本身定义的,不能作为变量名使用。常见的关键字包括:
int
:表示整数类型char
:表示字符类型return
:返回值if
、else
:条件判断
关键字的作用是告诉编译器程序的基本结构和功能。
三、数据类型、变量、常量的声明与使用
在C语言中,数据类型、变量和常量是编程的基本元素,它们帮助程序员控制数据的存储和操作。通过合理的使用数据类型和变量,可以高效地管理程序中的数据。常量则为不需要改变值的数据提供了一个更为安全的存储方式。本文将详细讲解C语言中的数据类型、变量和常量的声明与使用。
3.1 数据类型的基本分类
数据类型决定了变量所能存储的值的类型和大小。在C语言中,数据类型主要分为三大类:
3.1.1 基本数据类型
基本数据类型是C语言最基础的数据类型,它们提供了对不同数据格式的支持。常见的基本数据类型包括:
int
:用于表示整数。它可以存储正整数、负整数和零,通常占用4个字节(32位系统)。float
:用于表示单精度浮点数,通常占用4个字节,用于表示带有小数部分的数值。double
:用于表示双精度浮点数,通常占用8个字节,精度高于float
。char
:用于表示字符,通常占用1个字节,存储单个字符(如'A'
、'b'
)。
示例代码:
int a = 10; // 整数
float b = 3.14f; // 单精度浮点数
double c = 3.14159; // 双精度浮点数
char d = 'A'; // 字符
3.1.2 衍生数据类型
C语言中的衍生数据类型是通过基本数据类型或其他衍生类型组合而成的类型。常见的衍生数据类型有:
- 数组:一组相同类型元素的集合。
- 指针:用于存储地址的变量,可以指向其他变量的内存位置。
- 结构体:将不同类型的数据组合在一起的复合数据类型。
例如,声明一个整数数组和一个指针:
int arr[5]; // 数组
int *ptr = &a; // 指针
3.1.3 空类型
**void
**类型用于表示没有值或不确定的数据类型。常用于函数的返回类型或指针类型。
例如,void
常作为函数的返回类型,表示该函数没有返回值:
void printMessage() {printf("Hello, world!\n");
}
3.2 变量的声明与使用
3.2.1 变量的声明
在C语言中,变量是用于存储数据的内存空间。变量的声明需要指定其数据类型及名称。变量声明的基本语法如下:
类型 变量名;
例如,声明一个整型变量age
:
int age;
变量声明时可以指定初始值:
int age = 18; // 声明并初始化变量age
3.2.2 变量的初始化
在C语言中,变量在声明后可以进行初始化,初始化即赋予变量一个初始值。变量初始化通常是通过赋值语句进行的:
int a = 10; // 变量a声明并初始化为10
未初始化的局部变量可能会包含垃圾值,因此,建议在声明变量时进行初始化。
3.2.3 变量的使用
变量一旦声明并初始化后,就可以在程序中进行操作和使用。变量可以进行算术运算、比较、赋值等操作。
例如:
int a = 5, b = 10;
int sum = a + b; // sum将被赋值为15
3.3 常量的声明与使用
常量在程序中表示一个固定的值,其值在程序执行过程中不能改变。C语言中常量的声明主要通过两种方式:#define
和const
。
3.3.1 使用#define
定义常量
#define
是一种宏定义方式,可以在程序编译时将常量值替换成指定的值。常量值可以是数值、字符等。例如:
#define PI 3.14159 // 定义圆周率常量PI
#define MAX_SIZE 100 // 定义最大数组大小常量
使用时,不需要加上任何符号,只需直接使用常量名:
double area = PI * radius * radius; // 使用PI常量
3.3.2 使用const
关键字定义常量
const
关键字用于定义一个值不可改变的变量。与#define
不同,const
定义的常量实际上是一个变量,只不过其值在程序执行过程中无法更改。
例如:
const float PI = 3.14159; // 使用const定义PI常量
const
常量与普通变量一样,具有类型信息。其值不能被修改,如果修改会产生编译错误。
3.3.3 常量的应用场景
常量通常用于那些在整个程序中保持不变的值,例如圆周率、物理常数等。在C语言中使用常量而不是硬编码的数值,可以增加程序的可维护性和可读性。
例如,在计算圆的面积时,使用常量PI
比直接使用数值3.14159
更加清晰且易于维护:
double area = PI * radius * radius; // 更加直观、易于修改
3.4 数据类型的类型转换
C语言提供了两种类型转换方式:隐式类型转换和显式类型转换。
3.4.1 隐式类型转换
隐式类型转换是由编译器自动完成的转换。当一个较小范围的数据类型赋值给一个较大范围的数据类型时,编译器会自动执行类型转换。
例如,将int
类型的变量赋值给double
类型:
int a = 10;
double b = a; // 隐式类型转换
3.4.2 显式类型转换
显式类型转换是由程序员手动进行的转换,通常使用强制转换操作符(类型)
。这种转换通常用于将一个较大的数据类型转换为较小的数据类型,或者改变数据的表示方式。
例如:
double x = 3.14;
int y = (int)x; // 显式类型转换,将x转换为整数
需要注意的是,显式类型转换可能会丢失数据,特别是从浮点型转换为整型时。
四、基本运算符的使用
在C语言中,运算符用于执行各种操作,如算术运算、比较、逻辑判断等。理解和掌握基本运算符的使用是编写C语言程序的重要基础。C语言提供了多种类型的运算符,主要包括算术运算符、关系运算符、逻辑运算符等。本文将详细介绍这些基本运算符及其使用方式。
4.1 算术运算符
算术运算符用于执行基本的数学运算。C语言支持常见的算术运算符,允许我们进行加法、减法、乘法、除法和取余等操作。
4.1.1 常见的算术运算符
+
:加法运算符,用于两个操作数的加法。-
:减法运算符,用于两个操作数的减法。*
:乘法运算符,用于两个操作数的乘法。/
:除法运算符,用于两个操作数的除法。%
:取余运算符,用于求余数,返回两个操作数相除后的余数。
4.1.2 示例代码
#include <stdio.h>int main() {int a = 10, b = 3;printf("a + b = %d\n", a + b); // 输出加法结果printf("a - b = %d\n", a - b); // 输出减法结果printf("a * b = %d\n", a * b); // 输出乘法结果printf("a / b = %d\n", a / b); // 输出除法结果printf("a %% b = %d\n", a % b); // 输出取余结果return 0;
}
输出:
a + b = 13
a - b = 7
a * b = 30
a / b = 3
a % b = 1
需要注意的是,除法运算符/
在整数之间的运算结果会向下取整,例如10 / 3
的结果为3
,而不是3.3333
。
4.2 关系运算符
关系运算符用于比较两个操作数的关系,返回的结果为布尔值(真或假)。这些运算符常用于条件判断中,决定程序的控制流。
4.2.1 常见的关系运算符
==
:等于运算符,判断两个操作数是否相等。!=
:不等于运算符,判断两个操作数是否不相等。>
:大于运算符,判断左边的操作数是否大于右边的操作数。<
:小于运算符,判断左边的操作数是否小于右边的操作数。>=
:大于等于运算符,判断左边的操作数是否大于或等于右边的操作数。<=
:小于等于运算符,判断左边的操作数是否小于或等于右边的操作数。
4.2.2 示例代码
#include <stdio.h>int main() {int a = 10, b = 5;printf("a == b: %d\n", a == b); // 判断a是否等于bprintf("a != b: %d\n", a != b); // 判断a是否不等于bprintf("a > b: %d\n", a > b); // 判断a是否大于bprintf("a < b: %d\n", a < b); // 判断a是否小于bprintf("a >= b: %d\n", a >= b); // 判断a是否大于或等于bprintf("a <= b: %d\n", a <= b); // 判断a是否小于或等于breturn 0;
}
输出:
a == b: 0
a != b: 1
a > b: 1
a < b: 0
a >= b: 1
a <= b: 0
输出结果中的1
表示条件成立(真),0
表示条件不成立(假)。
4.3 逻辑运算符
逻辑运算符用于对布尔值进行逻辑操作,常用于条件判断中。C语言提供了三种常见的逻辑运算符:
4.3.1 常见的逻辑运算符
&&
:逻辑与运算符,只有两个操作数都为真时,结果才为真。||
:逻辑或运算符,两个操作数中只要有一个为真,结果就为真。!
:逻辑非运算符,用于取反操作,若操作数为真,结果为假;若操作数为假,结果为真。
4.3.2 示例代码
#include <stdio.h>int main() {int a = 10, b = 5, c = 3;printf("a > b && b > c: %d\n", a > b && b > c); // 判断a > b且b > cprintf("a < b || b > c: %d\n", a < b || b > c); // 判断a < b或b > cprintf("!(a < b): %d\n", !(a < b)); // 判断a < b是否成立并取反return 0;
}
输出:
a > b && b > c: 1
a < b || b > c: 1
!(a < b): 1
逻辑运算符通常用于if
语句中进行复杂的条件判断,例如:
if (a > b && b > c) {printf("a > b 且 b > c\n");
}
4.4 赋值运算符
赋值运算符用于将右边的值赋给左边的变量。C语言中的赋值运算符不仅包括常见的=
,还支持复合赋值运算符。
4.4.1 常见的赋值运算符
=
:赋值运算符,将右边的值赋给左边的变量。+=
:加法赋值,将右边的值加到左边变量上并赋值给左边。-=
:减法赋值,将右边的值从左边变量中减去并赋值给左边。*=
:乘法赋值,将左边变量与右边值相乘并赋值给左边。/=
:除法赋值,将左边变量除以右边值并赋值给左边。
4.4.2 示例代码
#include <stdio.h>int main() {int a = 10;a += 5; // a = a + 5printf("a += 5: %d\n", a);a -= 3; // a = a - 3printf("a -= 3: %d\n", a);a *= 2; // a = a * 2printf("a *= 2: %d\n", a);a /= 4; // a = a / 4printf("a /= 4: %d\n", a);return 0;
}
输出:
a += 5: 15
a -= 3: 12
a *= 2: 24
a /= 4: 6
五、总结
本文主要讲解了C语言中的基本运算符,并通过示例代码帮助读者更好地理解和运用这些运算符。具体内容总结如下:
-
算术运算符:我们详细介绍了加法、减法、乘法、除法和取余等常见的算术运算符,并提供了实例,帮助读者理解它们的实际应用和注意事项。
-
关系运算符:关系运算符用于比较两个值之间的大小或相等性,文章中详细讲解了等于、不等于、大于、小于等常用关系运算符,帮助读者在程序中进行条件判断。
-
逻辑运算符:逻辑运算符用于处理布尔值的操作。本文介绍了逻辑与、逻辑或和逻辑非等常用逻辑运算符的使用,并给出实例,帮助读者进行复杂的条件判断。
-
赋值运算符:除了基本的赋值操作,文章还讲解了加法赋值、减法赋值等复合赋值运算符,帮助读者简化代码并提高程序的可读性。
相关文章:
C语言从零到精通:常用运算符完全指南,掌握算术、逻辑与关系运算
系列文章目录 01-C语言从零到精通:常用运算符完全指南,掌握算术、逻辑与关系运算 文章目录 系列文章目录前言一、C语言的起源与应用领域1.1 C语言的起源1.2 C语言的应用领域1.2.1 操作系统开发1.2.2 嵌入式系统1.2.3 编译器开发1.2.4 游戏开发与图形处理…...
ArkUI概述
鸿蒙操作系统(HarmonyOS)是华为公司推出的一款面向未来、面向全场景的分布式操作系统。它不仅能够支持各种不同的设备,从手机、平板到智能穿戴和智能家居产品,而且为开发者提供了一套统一的开发环境和工具链。对于想要深入鸿蒙开发…...
浅谈计算机网络03 | 现代网络组成
现代网络组成 一 、网络生态体系1.1网络生态系统的多元主体1.2 网络接入设施的多样类型 二、现代网络的典型体系结构解析三、高速网络技术3.1 以太网技术3.2 Wi-Fi技术的深度剖析3.2.1 应用场景的多元覆盖3.2.2 标准升级与性能提升 3.3 4G/5G蜂窝网的技术演进3.3.1 蜂窝技术的代…...
在线图片马赛克处理工具
在线图片马赛克处理工具,无需登录,无需费用,用完就走。 包括中文和英文版本 官网地址: https://mosaic.openai2025.com...
文件上传 分片上传
分片上传则是将一个大文件分割成多个小块分别上传,最后再由服务器合并成完整的文件。这种做法的好处是可以并行处理多个小文件,提高上传效率;同时,如果某一部分上传失败,只需要重传这一部分,不影响其他部分…...
网络安全---CMS指纹信息实战
CMS简介 CMS(Content Management System)指的是内容管理系统,如WordPress、Joomla等。CMS系统非常常见,几乎所有大型网站都使用CMS来管理其网站的内容。由于常见CMS的漏洞较多,因此黑客将不断尝试利用这些漏洞攻击CMS…...
Ubuntu 24.04 LTS 系统语言英文改中文
Ubuntu 24.04 LTS 修改软件源 Ubuntu 更改软件源 修改语言 无需输入命令,为Ubuntu 24.04系统添加中文智能拼音输入法 在 setting 的 system 中按下图操作 点击“Apply Changes”。需要管理员密码,安装完成后,退出登录,重新登…...
信创在医疗领域的应用:开启医疗信息化新时代
信创在医疗领域的应用:开启医疗信息化新时代 信创在医疗领域的应用:开启医疗信息化新时代信创医疗自助一体机杭医基于信创底座的健康医疗大数据平台厦门大学附属成功医院基于海光CPU的信创改造中科可控基于海光CPU的智慧医疗解决方案 信创在医疗领域的应…...
力扣-数组-303 区域和检索-数组不可变
解析 题目有点费解,大致应该是给出区间内的和,然后维护一个前缀和,为了防止越界,先填一个0进去,在构建的时候也要注意此时构建的dp的下标是i1,所以加的前缀和的下标是i。 代码 class NumArray { public:…...
【CSS】---- CSS 实现超过固定高度后出现展开折叠按钮
1. 实现效果 2. 实现方法 使用 JS 获取盒子的高度,来添加对应的按钮和样式;使用 CSS 的浮动效果,参考CSS 实现超过固定高度后出现展开折叠按钮;使用容器查询 – container 语法;使用 clamp 函数进行样式判断。 3. 优…...
二十项零信任相关的前沿和趋势性技术-MASQUE
影响力评级:较低 市场渗透率:不到目标受众的 1% 成熟度:孵化 定义:基于QUIC加密的多路复用应用程序底层 (MASQUE) 是一个 IETF 标准草案,可实现流量的安全传输和代理。 MASQUE全称为:Multiplexed Appli…...
【Docker】使用Dev Container进行开发
工作区 Dev Container 设置 新建一个文件夹 ./devcontainer 然后下面放 devcontainer.json 然后安装 vscode dev container 插件,然后 CtrlShiftP 启动 Container {"name": "PyTorch-Julia Development","image": "x66ccff/p…...
搭建一个基于Spring Boot的数码分享网站
搭建一个基于Spring Boot的数码分享网站可以涵盖多个功能模块,例如用户管理、数码产品分享、评论、点赞、收藏、搜索等。以下是一个简化的步骤指南,帮助你快速搭建一个基础的数码分享平台。 — 1. 项目初始化 使用 Spring Initializr 生成一个Spring …...
在线json格式化工具
在线json格式化工具,包括中文和英文版本,无需登录,无需费用,用完就走。 官网地址: https://json.openai2025.com 效果如下:...
leetcode300.最长递增子序列
给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。 示例 1&…...
【个人学习记录】软件开发生命周期(SDLC)是什么?
软件开发生命周期(Software Development Life Cycle,SDLC)是一个用于规划、创建、测试和部署信息系统的结构化过程。它包含以下主要阶段: 需求分析(Requirements Analysis) 收集并分析用户需求定义系统目标…...
CTE与临时表:优劣势对比及使用场景分析
在数据库开发中,尤其是在复杂查询和优化中,**公共表表达式(CTE)和临时表(Temporary Table)**是两种常用的工具。尽管它们的功能有些相似,都是为了处理中间结果集,但它们的优劣势和使…...
Kali环境变量技巧(The Environment Variable Technique Used by Kali
Kali环境变量技巧 朋友们好,我们今天继续更新《黑客视角下的Kali Linux的基础与网络管理》中的管理用户环境变量。为了充分利用我们的黑客操作系统Kali Linux,我们需要理解和善于使用环境变量,这样会使我们的工具更具便利,甚至具…...
Ubuntu 24.04 LTS linux 文件权限
Ubuntu 24.04 LTS 文件权限 读权限 :允许查看文件的内容。写权限 (w):允许修改文件的内容。执行权限 (x):允许执行文件(对于目录来说,是进入目录的权限)。 文件权限通常与三类用户相关联: 文…...
多个版本JAVA切换(学习笔记)
多个版本JAVA切换 很多时候,我们电脑上会安装多个版本的java版本,java8,java11,java17等等,这时候如果想要切换java的版本,可以按照以下方式进行 1.检查当前版本的JAVA 同时按下 win r 可以调出运行工具…...
AI刷题-最小替换子串长度、Bytedance Tree 问题
目录 一、最小替换子串长度 问题描述 输入格式 输出格式 输入样例 1 输出样例 1 输入样例 2 输出样例 2 解题思路: 问题理解 数据结构选择 算法步骤 最终代码: 运行结果: 二、Bytedance Tree 问题 问题描述 输入格式 输…...
Android 项目依赖冲突问题:Duplicate class found in modules
问题描述与处理处理 1、问题描述 plugins {id com.android.application }android {compileSdk 34defaultConfig {applicationId "com.my.dialog"minSdk 21targetSdk 34versionCode 1versionName "1.0"testInstrumentationRunner "androidx.test.run…...
Webpack简述
一、为什么要构建工具 人类喜欢书写的代码以及开发方式计算机不喜欢,构建工具的作用就是让人类舒舒服服写自己喜欢的代码,然后一打包生成计算机喜欢的代码 第一个webpack自身仅仅是将我们引入的模块打包成一个文件(编译import)&am…...
ARM GCC编译器
ARM GCC编译器(GNU Compiler Collection for ARM)是GNU项目的一部分,专门用于编译针对ARM架构的代码。它是一个开源的工具链,支持多种编程语言,包括C、C和汇编语言。以下是关于ARM GCC编译器的详细解释及其作用&#x…...
CSS3 3D 转换介绍
CSS3 中的 3D 转换提供了一种在二维屏幕上呈现三维效果的方式,主要包括translate3d、rotate3d、scale3d等转换函数,下面来详细介绍: 1. 3D 转换的基本概念 坐标系 在 CSS3 的 3D 空间中,使用的是右手坐标系。X 轴是水平方向&…...
关于 Cursor 的一些学习记录
文章目录 1. 写在最前面2. Prompt Design2.1 Priompt v0.1:提示设计库的首次尝试2.2 注意事项 3. 了解 Cursor 的 AI 功能3.1 问题3.2 答案 4. cursor 免费功能体验5. 写在最后面6. 参考资料 1. 写在最前面 本文整理了一些学习 Cursor 过程中读到的或者发现的感兴趣…...
3. 后端验证前端Token
书接上回,后端将token返回给前端,前端存入cookie,每次前端给后端发送请求,后端是如何验证的。 若依是用过滤器来实现对请求的验证,过滤器的简单理解是每次发送请求的时候先发送给过滤器执行逻辑判断以及处理࿰…...
【LLM】Openai-o1及o1类复现方法
note 可以从更为本质的方案出发,通过分析强化学习的方法,看看如何实现o1,但其中的核心就是在于,如何有效地初始化策略、设计奖励函数、实现高效的搜索算法以及利用强化学习进行学习和优化。 文章目录 note一、Imitate, Explore, …...
与“神”对话:Swift 语言在 2025 中的云霓之望
0. 引子 夜深人静,是一片极度沉醉的黑,这便于我与深沉的 macbook 悄悄隐秘于其中。一股异香袭来,恍惚着,撸码中身心极度疲惫、头脑昏沉的我仿佛感觉到了一束淡淡的微光轻洒在窗边。 我的对面若隐若现逐渐浮现出一个熟悉的身影。他…...
设计模式-单例模式
定义 保证一个类仅有一个实例,并提供一个访问它的全局访问点。 类图 类型 饿汉式 线程安全,调用效率高,但是不能延迟加载。 public class HungrySingleton {private static final HungrySingleton instancenew HungrySingleton();private …...
C#枚举类型携带额外数据的方法
Java里面的枚举类型可以定义很多属性,携带各种数据,然而C#里面的枚举类型只能代表数字,不能在枚举类型里面定义各种属性,导致某些应用场景使用起来不方便,但是可以利用C#里面的Attribute来解决这个问题。 例如…...
跨境电商使用云手机用来做什么呢?
随着跨境电商的发展,越来越多的卖家开始尝试使用云手机来协助他们的业务,这是因为云手机具有许多优势。那么,具体来说,跨境电商使用云手机可以做哪些事情呢? (一)实现多账号登录和管理 跨境电商…...
RabbitMQ-消息可靠性以及延迟消息
目录 消息丢失 一、发送者的可靠性 1.1 生产者重试机制 1.2 生产者确认机制 1.3 实现生产者确认 (1)开启生产者确认 (2)定义ReturnCallback (3)定义ConfirmCallback 二、MQ的持久化 2.1 数据持久…...
Mybatis plus中的BaseMapper与ServiceImpl
BaseMapper接口方法与ServiceImpl类方法的区别与联系 什么是BaseMapper?什么是ServiceImpl? BaseMapper 是 MyBatis-Plus 提供的一个基础 Mapper 接口,封装了常用的 CRUD 操作方法,如 selectById、insert、updateById、deleteBy…...
第三篇 Avaya IP Office的架构及其服务组成
所谓的架构,其实就是Solution,解决方案。一般就是如下几套: IPO primary IPO secondaryIPO primary IP500v2IPO primary IPO secondary IP500v2IPO primary IPO secondary IP500v2 Expansion Server(IP500v2,扩展)IPO primaryIPO 500v2 简单的解释…...
近红外简单ROI分析matlab(NIRS_SPM)
本次笔记主要想验证上篇近红外分析是否正确,因为叠加平均有不同的计算方法,一种是直接将每个通道的5分钟实时长单独进行叠加平均,另一种是将通道划分为1分钟的片段,将感兴趣的通道数据进行对应叠加平均,得到一个总平均…...
ESP32学习笔记_FreeRTOS(6)——Event and Notification
摘要(From AI): 这篇博客详细介绍了 FreeRTOS 中的事件组和任务通知机制,讲解了事件组如何通过位操作实现任务间的同步与通信,以及任务如何通过通知机制进行阻塞解除和数据传递。博客提供了多个代码示例,展示了如何使用事件组和任务通知在多任…...
多监控m3u8视频流,怎么获取每个监控的封面图(纯前端)
文章目录 1.背景2.问题分析3.解决方案3.1解决思路3.2解决过程3.2.1 封装播放组件3.2.2 隐形的视频div3.2.3 截取封面图 3.3 结束 1.背景 有这样一个需求: 给你一个监控列表,每页展示多个监控(至少12个,m3u8格式)&…...
ExpGCN:深度解析可解释推荐系统中的图卷积网络
一、引言 在当今信息爆炸的时代,推荐系统已成为电子商务和社交网络中不可或缺的工具,旨在为用户筛选出符合其兴趣的信息。传统的协同过滤(CF)技术通过挖掘用户与项目之间的交互记录来生成推荐,但这种方法简化了模型&a…...
ChatGPT Prompt 编写指南
一、第一原则:明确的意图 你需要明确地表达你的意图和要求,尽可能具体、描述性、详细地描述所需的上下文、你期望的结果等。你的要求越明确,越有希望获得你想要的答案。 糟糕的案例 ❌ 写一首关于 OpenAI 的诗。 更好的案…...
【脑机接口数据处理】 如何读取Trode 的.rec文件 原始数据?
文章目录 函数简介文件下载函数语法基本用法带时间跳过的用法带选项参数的用法输出结构使用示例 注意事项 MATLAB中读取Trodes文件的实用函数——readTrodesFileContinuous 在处理神经科学实验数据时,经常会遇到Trodes格式的文件。这些文件包含了丰富的神经信号数据…...
反转字符串中的单词 II:Swift 实现与详解
网罗开发 (小红书、快手、视频号同名) 大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等…...
蓝桥杯训练—矩形面积交
文章目录 一、题目二、示例三、解析四、代码 一、题目 平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴,对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程写出两个矩形的交的面积 输入格式: 输入包含两行…...
如何设置HTTPS站点防御?
设置HTTPS站点防御涉及到多个层面的安全措施,包括但不限于配置Web服务器、应用安全头信息、使用内容安全策略(CSP)、启用HSTS和OCSP Stapling等。下面是一些关键的步骤来增强HTTPS网站的安全性: 1. 使用强加密协议和密钥交换算法…...
光谱相机如何还原色彩
多光谱通道采集 光谱相机设有多个不同波段的光谱通道,可精确记录每个波长的光强信息。如 8 到 16 个甚至更多的光谱通道,每个通道负责特定波长范围的光信息记录。这使得相机能分辨出不同光谱组合产生的相同颜色感知,而传统相机的传感器通常只…...
doris:导入概览
Apache Doris 提供了多种导入和集成数据的方法,您可以使用合适的导入方式从各种源将数据导入到数据库中。Apache Doris 提供的数据导入方式可以分为四类: 实时写入:应用程序通过 HTTP 或者 JDBC 实时写入数据到 Doris 表中,适用于…...
Linux 操作二:文件映射与文件状态
Linux 操作二:文件映射与文件状态查询 文件映射 mmap是一种内存映射文件的方法,即将一个文件或者其它对象映射到进程的地址空间,实现文件磁盘地址和进程虚拟地址空间中一段虚拟地址的一一对映关系。实现这样的映射关系后,进程…...
ASP .NET Core 学习 (.NET 9)- 创建 API项目,并配置Swagger及API 分组或版本
本系列为个人学习 ASP .NET Core学习全过程记录,基于.NET 9 和 VS2022 ,实现前后端分离项目基础框架搭建和部署,以简单、易理解为主,注重页面美观度和后台代码简洁明了,可能不会使用过多的高级语法和扩展,后…...
电脑换固态硬盘
参考: https://baijiahao.baidu.com/s?id1724377623311611247 一、根据尺寸和缺口可以分为以下几种: 1、M.2 NVME协议的固态 大部分笔记本是22x42MM和22x80MM nvme固态。 在京东直接搜: M.2 2242 M.2 2280 2、msata接口固态 3、NGFF M.…...
Android BitmapShader实现狙击瞄具十字交叉线准星,Kotlin
Android BitmapShader实现狙击瞄具十字交叉线准星,Kotlin <?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.android.…...