【C语言】第一期——数据类型变量常量
目录
1 字面量
2 整数类型
2.1 整数类型的取值范围
2.1.1 sizeof 运算符
2.2 GB、MB、KB、B之间的关系
2.3 定义整数类型的变量并打印
2.4 整数类型代码演示
3 浮点类型
3.1 浮点类型的取值范围
3.2 定义浮点类型变量并打印
3.3 保留2位小数点
4 char字符型
4.1 char类型的取值范围
4.2 ASCII码表(了解)
4.3 C语言中的字符串
4.3.1 %s 用户字符串的输出
5 C语言中的变量和常量
5.1 变量
5.1.1 一次定义多个变量
5.2 常量
5.2.1 字符常量 (转义字符)
5.2.2 const 和 #define 定义常量(重要)
5.2.2.1 #define 预处理器定义常量
5.2.2.2 const 关键字定义常量
5.2.2.3 #define 与 const 区别
6 C语言中标识符的命名规则以及注释
6.1 标识符的命名规则
6.2 C语言关键字
6.3 C语言的注释
7 C语言中printf与数据类型占位符
C 中的类型可分为以下几种:
| 类型名称 | 描述 |
|---|---|
| 基本数据类型 | 它们是算术类型,包括整型(int)、字符型(char)、浮点型(float)和双精度浮点型(double)。 |
| 枚举类型 | 它们也是算术类型,被用来定义在程序中只能赋予其一定的离散整数值的变量。 |
| void 类型 | 类型说明符 void 表示没有值的数据类型,通常用于函数返回值。 |
| 派生类型 | 包括数组类型、指针类型和结构体类型。 |
这里我们首先给大家讲解一下基本数据类型,后期教程会详细讲解一下其他类型,在全部更新完后,会在此页面标记相应期数
1 字面量
在C语言中,字面量是一种不可变的数据类型,通过字面量可以存储数字、字符、布尔值和其他特殊值,如文件路径、日期和时间等 。
C语言中字面量主要分为下面几种:
❗注意:字符型是单引号,字符串是双引号
| 类型 | 示例 | 格式符(占位) |
|---|---|---|
| 整型 | 100、314、0、-200 | %d |
| 浮点型 | 3.14、12.2、0.618、-1.7 | %f |
| 字符型 | 'a'、'1'、'='、'?'、'#' | %c |
| 字符串 | "124"、"hello"、"www.qq.com" | %s |
2 整数类型
2.1 整数类型的取值范围
下表列出了关于标准整数类型的存储大小和值范围的细节:
| 类型 | 存储大小 | 值范围 |
|---|---|---|
| char | 1 字节 | -128 到 127 或 0 到 255 |
| unsigned char | 1 字节 | 0 到 255 |
| signed char | 1 字节 | -128 到 127 |
| int | 4 字节 | -2,147,483,648 到 2,147,483,647 |
| unsigned int | 4 字节 | 0 到 4,294,967,295 |
| short | 2 字节 | -32,768 到 32,767 |
| unsigned short | 2 字节 | 0 到 65,535 |
| long | 4 字节 | -2,147,483,648 到 2,147,483,647 |
| unsigned long | 4 字节 | 0 到 4,294,967,295 |
❗注意:char 类型是否有符号取决于编译器和系统。
有些编译器将 char 视为 signed char,而有些则将其视为 unsigned char。
如果编译器将 char 视为 signed char:其取值范围就是 -128 到 127。
如果编译器将 char 视为 unsigned char:其取值范围就是 0 到 255。各种类型的存储大小与系统位数有关,但目前通用的以64位系统为主。
2.1.1 sizeof 运算符
为了得到某个类型或某个变量在特定平台上的准确大小,可以使用 sizeof 运算符得到对象或类型的存储字节大小。
表达式:sizeof(type)
下面的实例演示了获取 int 类型的大小:
#include <stdio.h>int main(){printf("int 存储大小 : %d 个字节\n", sizeof(int));return 0;}
2.2 GB、MB、KB、B之间的关系
| 单位名称 | 英文全称 | 与下一级单位换算关系 |
|---|---|---|
| 比特 | bit | - |
| 字节 | byte | 1B = 8 bit |
| 千字节 | Kilobyte | 1KB = 1024B |
| 兆字节 | Megabyte | 1MB = 1024KB |
| 吉字节 | Gigabyte | 1GB = 1024MB |
1bit=8位 00000 00000 ~ 1111 11111
2.3 定义整数类型的变量并打印
变量:顾名思义就是可以改变的量。变量本质上是一块有名字的内存空间,用来存放数据。
C语言中变量可以定义的时候赋值,也可以先定义后赋值
下面定义了一个int类型的变量 a,并且给a赋值了200
#include<stdio.h>int main(){int a = 200;printf("%d\n", a);return 0;}
下面首先定义了一个int类型的变量 a,然后给a赋值了200
#include <stdio.h>int main(){int a;a = 200;printf("%d\n", a);return 0;}
2.4 整数类型代码演示
#include <stdio.h> int main() {int a = 65;printf("a的值:%d\n", a);short b = 2;printf("b的值:%d\n", b);long c = 12345;printf("c的值:%d\n", c)unsigned short s = 12;printf("int 占用%d个字节\n", sizeof(int));printf("short 占用%d个字节\n", sizeof(short));printf("long 占用%d个字节\n", sizeof(long));printf("s的值:%d\n", s);return 0;}
输出结果:
a的值:65
b的值:2
c的值:12345
int 占用4个字节
short 占用2个字节
long 占用4个字节
s的值:12
3 浮点类型
3.1 浮点类型的取值范围
下表列出了关于标准浮点类型的存储大小、值范围和精度的细节
| 类型 | 存储大小 | 值范围 | 精度 |
|---|---|---|---|
| float | 4 字节 | 1.2E-38 到 3.4E+38 | 6 位有效位 |
| double | 8 字节 | 2.3E-308 到 1.7E+308 | 15 位有效位 |
| long double | 16 字节 | 3.4E-4932 到 1.1E+4932 | 19 位有效位 |
头文件 float.h 定义了宏,在程序中可以使用这些值和其他有关实数二进制表示的细节。
下面的实例将 输出浮点类型占用的存储空间以及它的范围值:
3.4E+38表示的意思是 3.4*10^38
3.2 定义浮点类型变量并打印
示例1:通过float定义一个浮点数
#include <stdio.h>int main(){float f = 3.14f;printf("%f\n", f);return 0;}
注意: float定义浮点数的时候,在数值后面需要加上f, 如果不加F,系统会默认把赋值的数字当作 double类型处理 ,然后在把这个double类型的值赋给float类型,这样就会出现精度丢失。
示例2:通过double定义一个浮点数
#include<stdio.h>int main(){double d = 3.14;printf("%lf\n", d);return 0;}
示例3:float 以及double占用的字节数
#include <stdio.h>int main(){printf("float 存储最大字节数 : %d \n", sizeof(float));printf("double 存储最大字节数 : %d \n", sizeof(double));return 0;}
输出结果:
float 存储最大字节数 : 4
double 存储最大字节数 : 8
3.3 保留2位小数点
#include <stdio.h>int main(){float a = 3.1415f;printf("%.2f", a);return 0;}
#include <stdio.h>int main(){double d = 3.14135;printf("%.2lf\n", d);return 0;}
输出结果:
3.14
4 char字符型
C语言中,字符型只有一种:字符型(char)。char占用1个字节
C 语言中,char 类型既可以当作整数类型使用,也可以当作字符类型使用
4.1 char类型的取值范围
下表列出了字符型的存储大小和值范围的细节:
| 存储大小 | 类型 | 值范围 |
|---|---|---|
| 1 字节 | char | -128 到 127 或 0 到 255 |
| 1 字节 | unsigned char | 0 到 255 |
如果想要明确指定有符号或无符号的字符类型,可以分别使用 signed char 和 unsigned char,这样在不同编译器下取值范围就确定了。
char字符类型数据在printf函数中一般采用c%格式进行输出
#include<stdio.h>int main(){char c = 'A';printf("%c\n", c); return 0;}
分析:
1.执行第 4 行程序时,先在内存中开 1字节空间,并标记为c,然后把字符A对应的ASCII码65,存储在c 标记的内存空间中。
2.执行第5行程序时,先读取变量c对应内存空间中的数据 65,然后替换 printf中的c,由于%c表示字符格式,因此不能直接输出整数65,而是输出65对应的字符A。
字符在内存中是按照其对应的 ASCII码进行存储,而ASCII码本质上也是整数。因此,字符型可以看作是整型的一种,当然也就可以按照 %d格式输出。
下面通过程序了解一下:
#include <stdio.h>int main(){char c = 'A';printf("%c\n", c);printf("%d\n", c);return 0;}
输出结果:
A
65
4.2 ASCII码表(了解)
| 编码 | 字符 | 编码 | 字符 | 编码 | 字符 | 编码 | 字符 |
|---|---|---|---|---|---|---|---|
| 0 | NUL | 32 | Space | 64 | @ | 96 | ` |
| 1 | SOH | 33 | ! | 65 | A | 97 | a |
| 2 | STX | 34 | " | 66 | B | 98 | b |
| 3 | ETX | 35 | # | 67 | C | 99 | c |
| 4 | EOT | 36 | $ | 68 | D | 100 | d |
| 5 | ENQ | 37 | % | 69 | E | 101 | e |
| 6 | ACK | 38 | & | 70 | F | 102 | f |
| 7 | BEL | 39 | ' | 71 | G | 103 | g |
| 8 | BS | 40 | ( | 72 | H | 104 | h |
| 9 | TAB | 41 | ) | 73 | I | 105 | i |
| 10 | LF | 42 | * | 74 | J | 106 | j |
| 11 | VT | 43 | + | 75 | K | 107 | k |
| 12 | FF | 44 | , | 76 | L | 108 | l |
| 13 | CR | 45 | - | 77 | M | 109 | m |
| 14 | SO | 46 | . | 78 | N | 110 | n |
| 15 | SI | 47 | / | 79 | O | 111 | o |
| 16 | DLE | 48 | 0 | 80 | P | 112 | p |
| 17 | DC1 | 49 | 1 | 81 | Q | 113 | q |
| 18 | DC2 | 50 | 2 | 82 | R | 114 | r |
| 19 | DC3 | 51 | 3 | 83 | S | 115 | s |
| 20 | DC4 | 52 | 4 | 84 | T | 116 | t |
| 21 | NAK | 53 | 5 | 85 | U | 117 | u |
| 22 | SYN | 54 | 6 | 86 | V | 118 | v |
| 23 | ETB | 55 | 7 | 87 | W | 119 | w |
| 24 | CAN | 56 | 8 | 88 | X | 120 | x |
| 25 | EM | 57 | 9 | 89 | Y | 121 | y |
| 26 | SUB | 58 | : | 90 | Z | 122 | z |
| 27 | ESC | 59 | ; | 91 | [ | 123 | { |
| 28 | FS | 60 | < | 92 | |124 | ||
| 29 | GS | 61 | = | 93 | ] | 125 | } |
| 30 | RS | 62 | > | 94 | ^ | 126 | ~ |
| 31 | US | 63 | ? | 95 | _ | 127 | DEL |
4.3 C语言中的字符串
在 C 语言中是没有字符串类型的,所谓的字符串本质上是由单个字符组成。例如:" USER_A001", 可以看做是由字符 'U'、'S'、'E'、'R'、'_'、'A'、'0'、'0'、'1'组成
#include <stdio.h>int main(){printf("我的名字是:%s", "USER_A001");return 0;}
4.3.1 %s 用户字符串的输出
在 C 语言中字符串实际上是使用空字符 \0 结尾的一维字符数组。
因此,\0 是用于标记字符串的结束。
#include <stdio.h>int main(){char name[10] = { 'U', 'S', 'E', 'R', '_', 'A', '0', '0', '1', '\0'};printf("我的姓名是:%s", name);return 0;}
5 C语言中的变量和常量
5.1 变量
变量是在程序运行过程中其值可以改变的量。
上文中的 char int float double定义的数据都是变量。
#include <stdio.h>
int main() {//整型int a; //声明a = 123; //初始化赋值a = 456; //修改值int b = 123; //声明完直接赋值//浮点型float c;c = 3.14f;c = 3.14159f;float c = 3.14f;return 0;}
5.1.1 一次定义多个变量
#include <stdio.h>int main(){int a = 100, b = 200; // 定义int 变量 a、 b 且赋值int c = 300; // 定义变量 c 且赋值int d = 400; printf("a=%d\n", a);printf("b=%d\n", b);printf("c=%d\n", c);printf("d=%d\n", d);return 0;}
5.2 常量
常量是指在程序执行过程中其值不能改变的量。
在 C语言中支持整型常量、浮点型常量、字符型常量和字符串型常量。
上文讲的字面量就属于常量
5.2.1 字符常量 (转义字符)
在 C 中,有一些特定的字符,当它们前面有反斜杠时,它们就具有特殊的含义,被用来表示如换行符 (\n)或制表符(\t)等。
| 转义序列1 | 含义1 | 转义序列2 | 含义2 |
|---|---|---|---|
| \\ | \字符 | \' | '字符 |
| \" | "字符 | \? | ?字符 |
\a | 警报铃声 | \b | 退格键 |
\f | 换页符 | \n | 换行符 |
\r | 回车 | \t | 水平制表符 |
\v | 垂直制表符 | \ooo | 一到三位的八进制数 |
\xhh... | 一个或多个数字的十六进制数 |
#include <stdio.h> int main() {printf("C:\Windows\System32\n"); //错误写法printf("C:\\Windows\\System32"); // 正确写法return 0;}
5.2.2 const 和 #define 定义常量(重要)
在 C 中,有两种简单的定义常量的方式:
1. 使用 #define 预处理器: #define 可以在程序中定义一个常量,它在编译时会被替换为其对应的值。
5.2.2.1 #define 预处理器定义常量
在C语言中,#define命令可以用于创建宏定义。宏定义是在编译时直接替换源文件中的字符串,而不 是在运行时替换它们 。
下面是使用 #define 预处理器定义常量的形式:
❗注意:宏定义后边不要加分号
#define 常量名 常量值
下面的代码定义了一个名为 PI 的常量:
在程序中使用该常量时,编译器会将所有的 PI 替换为 3.14159
#define PI 3.14159
实例:
#include <stdio.h>#define LENGTH 10 #define WIDTH 5#define NEWLINE '\n'int main(){int area; area = LENGTH * WIDTH;printf("value of area : %d", area);printf("%c", NEWLINE);return 0;}
运行结果:value of area : 50
5.2.2.2 const 关键字定义常量
可以使用 const 前缀声明指定类型的常量,如下所示:
❗注意,把常量定义为大写字母形式,是一个很好的编程习惯。
const 数据类型 常量名 = 常量值;
下面的代码定义了一个名为MAX_VALUE的常量:
在程序中使用该常量时,其值将始终为100,并且不能被修改。
const int MAX_VALUE = 100;
❗注意:const 声明常量要在一个语句内完成
错误写法:
const int var;
const int var;
var=5;正确写法:
const int var = 5;
实例:
#include <stdio.h>int main() {const int LENGTH = 10;const int WIDTH = 5;const char NEWLINE = '\n';int area;area = LENGTH * WIDTH;printf("value of area : %d", area);printf("%c", NEWLINE)return 0;}
运行结果:value of area : 50
5.2.2.3 #define 与 const 区别
#define 与 const 这两种方式都可以用来定义常量,选择哪种方式取决于具体的需求和编程习惯。通常 情况下,建议使用 const 关键字来定义常量,因为它具有类型检查和作用域的优势,而 #define 仅进 行简单的文本替换,可能会导致一些意外的问题。
#define 预处理指令和 const 关键字在定义常量时有一些区别:
替换机制: #define 是进行简单的文本替换,而 const 是声明一个具有类型的常量。 #define 定义的常量在编译时会被直接替换为其对应的值,而 const 定义的常量在程序运行时会分配内 存,并且具有类型信息。
类型检查: #define 不进行类型检查,因为它只是进行简单的文本替换。而 const 定义的常量 具有类型信息,编译器可以对其进行类型检查。这可以帮助捕获一些潜在的类型错误。
作用域: #define 定义的常量没有作用域限制,它在定义之后的整个代码中都有效。而const定义的常量具有块级作用域,只在其定义所在的作用域内有效。
调试和符号表:使用 #define 定义的常量在符号表中不会有相应的条目,因为它只是进行文本替 换。而使用 const 定义的常量会在符号表中有相应的条目,有助于调试和可读性。
6 C语言中标识符的命名规则以及注释
6.1 标识符的命名规则
1) 只能由26个英文字母、数字或下划线3种字符组成。
2) 第1个字符只能是字母或下划线。
3) 大小写敏感的。
4) 不能是关键字(关键词参考下面介绍的《C语言关键字》)。
合法标识符:Abc、a1、_max、day
非法标识符:1a、%abc、#33、a<b、1_2_5、in
6.2 C语言关键字
在c语言里面所谓的关键字,就是在我们编写代码时,颜色不一样的字。
而这些关键字,我们可以大致将其分为几类:存储类型、数据类型、控制语句、其他关键字。
| 类别 | 关键字 |
|---|---|
| 存储类型 | auto、static、register、extern |
| 数据类型 | int、short、long、char、float、double、signed、unsigned、struct、enum、union、void |
| 控制语句 | if、else、switch、case、default、break、for、while、do、goto、continue |
| 其他关键字 | const、sizeof、typedef、volatile、return |
6.3 C语言的注释
/* 这是一个多行注释,
它将在编译时被自动忽略
*/
int width = 20; // 这是一个单号注释
int x = 10; // 这是一个变量声明,它的值将被初始化为10
double y = 3.14; // 这是一个浮点数赋值语句,它将被转换为一个双精度浮点数
7 C语言中printf与数据类型占位符
在上文中我们给大家介绍过printf,为了方便记忆我们列出了printf中常用的占位符
| 占位符 | 类型 | 说明 |
|---|---|---|
| %d | int | 以十进制输出整数,%i 是以前的用法 |
| %f | float | 输出单精度浮点数,可以指定精度,%2f 就是保留 2 位小数 |
| %lf | double | 输出双精度浮点数,也可以指定精度 |
| %c | char | 也可以使用 % d 输出 char,此时输出的是字符的 ASCII 码 |
| %s | 字符串 | 输出字符串 |
❗注意:printf中数据类型一定不能用错,这涉及到数据在内存中表示格式的问题
另外,在printf 中也可以同时使用多个占位符,只要前后和参数的类型、个数能够对得上就行
例如:
printf("name=%s, age=%d, height=%f", "itying", 18, 3.14);
补充:volatile关键字
在 C 中,volatile 关键字主要用于告诉编译器,被修饰的变量可能会以编译器未知的方式被修改,因此编译器在对该变量进行优化时需要特殊处理,不要对该变量的访问进行不必要的优化。
举例:
a += 1;
a += 2;
经过编译器优化后,会直接变成
a += 3;
有了关键字volatile,则会分步进行,不会进行合并优化
好处:嵌入式的每一个步骤可能都有相应的作用,而合并会导致过程或结果不同
相关文章:
【C语言】第一期——数据类型变量常量
目录 1 字面量 2 整数类型 2.1 整数类型的取值范围 2.1.1 sizeof 运算符 2.2 GB、MB、KB、B之间的关系 2.3 定义整数类型的变量并打印 2.4 整数类型代码演示 3 浮点类型 3.1 浮点类型的取值范围 3.2 定义浮点类型变量并打印 3.3 保留2位小数点 4 char字符型 4.1…...
04运维实用篇(D4_日志)
目录 一、简介 二、代码中使用日志工具记录日志 1. 操作步骤 步骤1:添加日志记录操作 步骤2:设置日志输出级别 步骤3:设置日志组 2. 知识小结 三、优化日志对象创建代码 1. 实例 2. 总结 四、日志输出格式控制 1. 实例 2. 总结 …...
centos部署open-webui
提示:本文将简要介绍一下在linux下open-webui的安装过程,安装中未使用虚拟环境。 文章目录 一、open-webui是什么?二、安装流程1.openssl升级2.Python3.11安装3.sqlite安装升级4.pip 下载安装open-webui 总结 一、open-webui是什么? Open W…...
UE求职Demo开发日志#32 优化#1 交互逻辑实现接口、提取Bag和Warehouse的父类
1 定义并实现交互接口 接口定义: // Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreMinimal.h" #include "UObject/Interface.h" #include "MyInterActInterface.generated.h…...
Visonpro 检测是否有缺齿
一、效果展示 二、上面是原展开工具CogPolarUnwrapTool; 第二种方法: 用Blob 和 CogCopyRegionTool 三、 用预处理工具 加减常数,让图片变得更亮点 四、圆展开工具 五、模板匹配 六、代码分解 1.创建集合和文子显示工具 CogGraphicCollec…...
第1章大型互联网公司的基础架构——1.6 RPC服务
你可能在1.1节的引言中注意到业务服务层包括HTTP服务和RPC服务,两者的定位不一样。一般来说,一个业务场景的核心逻辑都是在RPC服务中实现的,强调的是服务于后台系统内部,所谓的“微服务”主要指的就是RPC服务;而HTTP服…...
今日AI和商界事件(2025-02-15)
根据2025年2月15日的科技动态,以下是今日AI领域的重要事件及相关进展总结: 1. DeepSeek日活突破3000万,开源生态加速AI普惠 里程碑意义:开源大模型DeepSeek宣布日活跃用户数突破3000万,其R1模型凭借开源策略和低成本优…...
算法题(69):搜索插入位置
审题: 需要我们在有序数组中找到等于target值的元素的下标若没有则返回target按顺序会插入的位置的索引 思路 : 我们可以使用二分查找的方法 方法一:二分查找 和普通的二分查找不同,本题若没有找到就需要返回它按顺序插入的位置的…...
在 Linux 系统中,tc(Traffic Control) QoS 常用命令简介
在 Linux 系统中,tc(Traffic Control)命令是一个强大的工具,用于配置和管理网络流量控制。以下是 tc 命令的常用功能和基本用法: 1. 查看当前队列规则 使用以下命令查看指定网络接口上的队列规则: tc qd…...
如何画产品功能图、结构图
功能图的类型 常见的功能图包括数据流图、用例图、活动图、状态图、类图、组件图、部署图等等,不同的应用场景和目标下,需要确定不同的功能图类型。 数据流图 用例图 状态图 类图 组件图 组件图是由软件系统、组件和组件之间的关系组成的图形…...
4090单卡挑战DeepSeek r1 671b:尝试量化后的心得的分享
引言: 最近,DeepSeek-R1在完全开源的背景下,与OpenAI的O1推理模型展开了激烈竞争,引发了广泛关注。为了让更多本地用户能够运行DeepSeek,我们成功将R1 671B参数模型从720GB压缩至131GB,减少了80%ÿ…...
SpringBoot速成(12)文章分类P15-P19
1.新增文章分类 1.Postman登录不上,可以从头registe->login一个新的成员:注意,跳转多个url时,post/get/patch记得修改成controller类中对应方法上写的 2.postman运行成功: 但表中不更新:细节有问题: c是…...
C++17中的clamp函数
一、std::clamp() 其实在前面简单介绍过这个函数,但当时只是一个集中的说明,为了更好的理解std::clamp的应用,本篇再详细进行阐述一次。std::clamp在C17中其定义的方式为: template< class T > constexpr const T& cl…...
配置Open-R1,评测第三方蒸馏模型的性能1
年前DeepSeek不温不火,问题的响应极。一回车,就看模型如口吐莲花般,先是输出思维过程,虽然中间绕来绕去,但是输出回答时还是准确而简洁的。比如,用它来读当时出来的几篇文章,确实大大提升了效率…...
Chrome插件开发流程
Chrome插件开发流程可以分为以下几个主要步骤: ### 1. 确定插件功能和目标 在开始开发之前,首先需要明确插件的功能和目标。这包括: - **功能定义**:确定插件要解决的问题或提供的功能。 - **市场分析**:了解目标用户群…...
物联网行业通识:从入门到深度解析
物联网行业通识:从入门到深度解析 (图1:物联网生态示意图) 一、引言:万物互联时代的到来 根据IDC最新预测,到2025年全球物联网设备连接数将突破410亿,市场规模达1.1万亿美元。物联网ÿ…...
【做一个微信小程序】校园事件页面实现
前言 为了进一步扩展校园事件页面的功能,我们可以添加 搜索、分类筛选 和 渐变卡片色 等特性。以下是详细的方案和源码实现。 扩展功能设计 1. 搜索功能 在页面顶部添加搜索框,用户输入关键词后,筛选出匹配的事件。2. 分类筛选 在页面顶部添加分类标签(如“全部”、“活动…...
C++基础系列【14】继承与多态
博主介绍:程序喵大人 35- 资深C/C/Rust/Android/iOS客户端开发10年大厂工作经验嵌入式/人工智能/自动驾驶/音视频/游戏开发入门级选手《C20高级编程》《C23高级编程》等多本书籍著译者更多原创精品文章,首发gzh,见文末👇…...
DeepSeek-R1 大模型本地部署指南
文章目录 一、系统要求硬件要求软件环境 二、部署流程1. 环境准备2. 模型获取3. 推理代码配置4. 启动推理服务 三、优化方案1. 显存优化技术2. 性能加速方案 四、部署验证健康检查脚本预期输出特征 五、常见问题解决1. CUDA内存不足2. 分词器警告处理3. 多GPU部署 六、安全合规…...
在conda环境下,安装Pytorch和CUDA
系统 : Ubuntu20.04 显卡:NVIDIA GTX1650 显卡驱动已经装好(命令 nvidia-smi 查看显卡配置) (主要看一下第一行的参数,最大支持的CUDA版本为12.4 ) Aanconda 版本(安装指南)(似乎…...
手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...
重启Eureka集群中的节点,对已经注册的服务有什么影响
先看答案,如果正确地操作,重启Eureka集群中的节点,对已经注册的服务影响非常小,甚至可以做到无感知。 但如果操作不当,可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...
基于IDIG-GAN的小样本电机轴承故障诊断
目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) 梯度归一化(Gradient Normalization) (2) 判别器梯度间隙正则化(Discriminator Gradient Gap Regularization) (3) 自注意力机制(Self-Attention) 3. 完整损失函数 二…...
tauri项目,如何在rust端读取电脑环境变量
如果想在前端通过调用来获取环境变量的值,可以通过标准的依赖: std::env::var(name).ok() 想在前端通过调用来获取,可以写一个command函数: #[tauri::command] pub fn get_env_var(name: String) -> Result<String, Stri…...
DeepSeek源码深度解析 × 华为仓颉语言编程精粹——从MoE架构到全场景开发生态
前言 在人工智能技术飞速发展的今天,深度学习与大模型技术已成为推动行业变革的核心驱动力,而高效、灵活的开发工具与编程语言则为技术创新提供了重要支撑。本书以两大前沿技术领域为核心,系统性地呈现了两部深度技术著作的精华:…...
小木的算法日记-多叉树的递归/层序遍历
🌲 从二叉树到森林:一文彻底搞懂多叉树遍历的艺术 🚀 引言 你好,未来的算法大神! 在数据结构的世界里,“树”无疑是最核心、最迷人的概念之一。我们中的大多数人都是从 二叉树 开始入门的,它…...
第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10+pip3.10)
第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10pip3.10) 一:前言二:安装编译依赖二:安装Python3.10三:安装PIP3.10四:安装Paddlepaddle基础框架4.1…...
