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

16 C 语言布尔类型与 sizeof 运算符详解:布尔类型的三种声明方式、执行时间、赋值规则

1 布尔类型

1.1 布尔类型概述

        布尔类型用于表示逻辑上的真(true)和假(false)两种状态,是编程中条件判断和逻辑运算的基础。在 C 语言中,布尔值的表示方式随着标准的发展而不断完善。

1.2 布尔类型的三种声明方式

宏定义方式(C89 及以前版本)

  • 在 C89 及以前的 C 语言标准中,没有原生的布尔类型。
  • 开发者通常使用宏定义来模拟布尔类型,将 TRUE FALSE 分别定义为 10
  • 这种方式不够直观,但能在一定程度上满足布尔逻辑的需求。
#include <stdio.h>// 宏定义布尔类型
#define BOOL int
#define TRUE 1
#define FALSE 0int main()
{BOOL isPass = FALSE; // 初始化为假BOOL isOk = TRUE;    // 初始化为真printf("isPass=%d, isOk=%d\n", isPass, isOk); // 输出: isPass=0, isOk=1if (isPass){printf("不会执行\n"); // 条件不满足,不会执行}if (isOk){printf("会执行\n"); // 条件满足,会执行}return 0;
}

        程序在 VS Code 中的运行结果如下所示:

_Bool 类型(C99 标准引入)

  • C99 标准引入了原生的布尔类型 _Bool
  • _Bool 类型只能存储 0 或 1,任何非 0 值赋给 _Bool 变量都会被隐式转换为 1(真)
  • 这种方式比宏定义更规范,但代码可读性稍差,因为通常需要输出为整数形式。
#include <stdio.h>int main()
{_Bool isPass = 0;   // 初始化为假// _Bool isOk = 1;  // 初始化为真_Bool isOk = -4;    // 非 0 值被转换为 1(真)printf("isPass=%d, isOk=%d\n", isPass, isOk); // 输出: isPass=0, isOk=1if (isPass){printf("不会执行\n"); // 条件不满足,不会执行}if (isOk){printf("会执行\n"); // 条件满足,会执行}return 0;
}

        程序在 VS Code 中的运行结果如下所示:

bool 类型(通过 stdbool.h 头文件)

  • C99 标准还提供了 <stdbool.h> 头文件其中定义了 bool 类型作为 _Bool 的别名
  • 同时定义了 true 和 false 宏,分别表示 1 和 0,使得代码更加直观易读。
  • 这是现代 C 编程中推荐使用的布尔类型表示方式。
#include <stdio.h>
#include <stdbool.h> // 包含布尔类型定义int main()
{bool isPass = false; // 初始化为假bool isOk = true;    // 初始化为真printf("isPass=%d, isOk=%d\n", isPass, isOk); // 输出: isPass=0, isOk=1if (isPass){printf("不会执行\n"); // 条件不满足,不会执行}if (isOk){printf("会执行\n"); // 条件满足,会执行}return 0;
}

        程序在 VS Code 中的运行结果如下所示:

        我们可以通过 VS Code 查看 <stdbool.h> 的源代码。将鼠标放在 stdbool.h 或 true 或 false 上,按住 Ctrl 键并点击鼠标左键即可查看其实现。<stdbool.h> 的源代码片段通常如下:

        这进一步验证了 bool 是 _Bool 的别名,true 和 false 分别对应 1 和 0。 

1.3 三种声明方式的执行时间

宏定义方式

  • 执行时间:
    • 宏定义是在预处理阶段执行的。预处理器会在编译之前处理所有的宏定义、文件包含等指令。
    • 在预处理阶段,所有的宏定义会被替换为对应的文本。例如,BOOL 会被替换为 int,TRUE 会被替换为 1,FALSE 会被替换为 0。
  • 特点:
    • 宏定义不会引入新的类型,只是简单的文本替换。
    • 由于是在预处理阶段完成,因此在编译阶段,编译器看到的已经是替换后的代码。

_Bool 类型

  • 执行时间:
    • _Bool 类型的处理是在编译阶段完成的
    • 编译器会识别 _Bool 类型,并在生成目标代码时进行相应的处理。
  • 特点:
    • _Bool 是 C 语言原生的布尔类型,提供了更好的类型安全性。
    • 编译器会在编译阶段对 _Bool 类型的变量进行优化,确保其只存储 0 或 1。

bool 类型

  • 执行时间:
    • bool 类型的处理也是在编译阶段完成的
    • 当包含 <stdbool.h> 头文件时,预处理器会将 bool 替换为 _Bool,true 替换为 1,false 替换为 0。
    • 编译器在编译阶段会识别 _Bool 类型,并进行相应的处理。
  • 特点:
    • bool 是 _Bool 的别名,提供了更直观和可读的布尔类型定义。
    • 使用 <stdbool.h> 是现代 C 编程中推荐的方式,因为它提高了代码的可读性和一致性。

执行时间总结

方式处理阶段特点
宏定义预处理阶段简单文本替换,无类型检查,灵活性高但安全性低
_Bool 类型编译阶段原生布尔类型,类型安全,编译器优化
bool 类型编译阶段_Bool 的别名,通过 <stdbool.h> 提供,直观可读,推荐使用

1.4 布尔类型的赋值规则

接受任何整数值

  • 布尔变量可以接受任何整数值(如 char、short、int、long 等类型)或任何可隐式转换为整数的表达式(如算术运算、位运算、比较运算等)。
  • 赋值时,编译器会自动将值转换为 0(false)或 1(true),无需手动处理。

非零值视为 true(存储为 1)

  • 任何非零值(包括正整数、负整数、大整数、甚至超出 bool 存储范围的值)都会被视为 true,并存储为 1
  • bool 的存储大小是固定的(通常为 1 字节,即 _Bool 类型),但赋值时不会因值过大而报错或截断
  • 编译器会自动转换:
    • 无论赋值 1、42 还是 1000000,最终存储的值只能是 0 或 1。
    • 这是因为 bool 类型的本质是逻辑值,而非数值,编译器会隐式地将任何非零值转换为 1
#include <stdio.h>
#include <stdbool.h>int main()
{bool b1 = 42;      // 42 → true(存储为 1)bool b2 = -1;      // -1 → true(存储为 1)bool b3 = 1000000; // 1,000,000 → true(存储为 1)printf("b1=%d (实际存储值: %d)\n", b1, b1); // 输出: b1=1 (实际存储值: 1)printf("b2=%d (实际存储值: %d)\n", b2, b2); // 输出: b2=1 (实际存储值: 1)printf("b3=%d (实际存储值: %d)\n", b3, b3); // 输出: b3=1 (实际存储值: 1)return 0;
}

        程序在 VS Code 中的运行结果如下所示:

零值视为 false(存储为 0)

  • 只有 0 或显式的 false 会被视为 false,并存储为 0
#include <stdio.h>
#include <stdbool.h>int main()
{bool b4 = 0;     // 0 → false(存储为 0)bool b5 = false; // false → false(存储为 0)printf("b4 = %d\n", b4); // 0printf("b5 = %d\n", b5); // 0return 0;
}

        程序在 VS Code 中的运行结果如下所示:

规则总结

规则示例存储值说明
非零值 → true(1)bool b = 42;1任何非零值(包括负数、大数)
零值 → false(0)bool b = 0;0仅 0 或 false
隐式转换bool b = -1;1编译器自动处理非零值
  • bool 类型仅存储 0 或 1,赋值时会自动转换,无需担心数值大小。
  • 这一规则确保了布尔逻辑的简洁性和一致性。

2 sizeof 运算符

        sizeof 是 C 语言中的一个重要运算符,用于获取数据类型、变量、字面量或表达式的存储大小(以字节为单位)

        它返回一个 size_t 类型的无符号整数值,通常使用 %zu 格式占位符进行输出。size_t 的具体类型(如 unsigned int 或 unsigned long)由系统和编译器决定。

2.1 sizeof 运算符的基本用法

        sizeof 运算符的主要功能是计算内存占用大小,适用于以下场景:

  1. 基本数据类型:如 bool、char、short、int、long、long long、float、double、long double 等。
  2. 变量:直接作用于变量名。
  3. 字面量:直接作用于常量值。
  4. 表达式:计算表达式的存储大小。

语法形式:

  • 对于基本数据类型或表达式:sizeof 后面必须使用括号包裹,例如 sizeof(int)、sizeof(1 + 1)。
  • 对于变量或字面量:sizeof 后面的括号是可选的,例如 sizeof a 或 sizeof(a)。

2.2 sizeof 的使用场景

计算基本数据类型的大小

        基本数据类型的大小可能因编译器和平台而异。以下是常见数据类型的典型大小:

#include <stdio.h>
#include <stdbool.h> // 包含 bool 类型int main()
{// 使用转义字符 \t 格式化输出printf("数据类型\t大小(字节)\n");printf("--------\t-----------\n");// 对于基本数据类型:sizeof 必须使用括号包裹printf("bool \t\t %zu \n", sizeof(bool));              // 通常为 1 字节printf("char \t\t %zu \n", sizeof(char));              // 通常为 1 字节printf("short \t\t %zu \n", sizeof(short));            // 通常为 2 字节printf("int \t\t %zu \n", sizeof(int));                // 通常为 4 字节printf("long \t\t %zu \n", sizeof(long));              // 通常为 4 或 8 字节printf("long long \t %zu \n", sizeof(long long));      // 通常为 8 字节printf("float \t\t %zu \n", sizeof(float));            // 通常为 4 字节printf("double \t\t %zu \n", sizeof(double));          // 通常为 8 字节printf("long double:\t %zu \n", sizeof(long double)); // 通常为 16 字节return 0;
}

        程序在 VS Code 中的运行结果如下所示:

计算字面量的大小

        字面量的大小取决于其类型,sizeof 后面的括号是可选的

  • 字符字面量(如 'a'):通常被提升为 int 类型,因此 sizeof('a') 返回 4(字节)
  • 整数和浮点数字面量:大小由其类型决定。例如:
    • 431 是 int 类型,sizeof(431) 返回 4。
    • 4.31 是 double 类型,sizeof 4.31 返回 8。
#include <stdio.h>
#include <stdbool.h>int main()
{// 字符类型字面量:在 C 中字符常量如 'a' 实际上是 int 类型(通常为 4 字节)printf("字符类型字面量('a'):%zu\n", sizeof('a'));     // 输出通常为 4(bool 提升为 int)printf("布尔类型字面量(true):%zu\n", sizeof(true));   // 输出通常为 4(bool 提升为 int)printf("布尔类型字面量(false):%zu\n", sizeof(false)); // 输出通常为 4(bool 提升为 int)// 整型字面量:默认是 int 类型printf("整型字面量(431):%zu\n", sizeof(431)); // 输出通常为 4(int)// 长整型后缀 L:long int(具体大小依赖平台)printf("长整型字面量(431L):%zu\n", sizeof(431L)); // 具体大小依赖平台// 长长整型后缀 LL:long long int(通常为 8 字节)printf("长长整型字面量(431LL):%zu\n", sizeof(431LL)); // 输出通常为 8(long long)// 单精度浮点数字面量:使用 f 后缀表示 float(通常为 4 字节)printf("单精度浮点型字面量(4.31f):%zu\n", sizeof(4.31f)); // 输出通常为 4(float)// 双精度浮点数字面量:默认是 double 类型(通常为 8 字节)printf("双精度浮点型字面量(4.31):%zu\n", sizeof(4.31)); // 输出通常为 8(double)// 长双精度浮点数字面量:使用 L 后缀表示 long double(通常为 16 字节)printf("长双精度浮点型字面量(4.31L):%zu\n", sizeof(4.31L)); // 输出通常 16// 对于字面量:sizeof 后面的括号是可选的printf("对于字面量:sizeof 后面的括号是可选的:%zu\n", sizeof true);  // 输出通常为 4(bool 提升为 int)printf("对于字面量:sizeof 后面的括号是可选的:%zu\n", sizeof 431);   // 输出通常为 4(int)printf("对于字面量:sizeof 后面的括号是可选的:%zu\n", sizeof 431L);  // 具体大小依赖平台printf("对于字面量:sizeof 后面的括号是可选的:%zu\n", sizeof 431LL); // 输出通常为 8(long long)printf("对于字面量:sizeof 后面的括号是可选的:%zu\n", sizeof 4.31f); // 输出通常为 4(float)printf("对于字面量:sizeof 后面的括号是可选的:%zu\n", sizeof 4.31);  // 输出通常为 8(double)printf("对于字面量:sizeof 后面的括号是可选的:%zu\n", sizeof 4.31L); // 输出通常为 16(long double)return 0;
}

        程序在 VS Code 中的运行结果如下所示:

计算变量的大小

        变量的大小与其类型一致,sizeof 后面的括号是可选的

#include <stdio.h>int main()
{char a = 'A';             // char 类型变量short b = 66;             // short 类型变量int c = 66;               // int 类型变量long d = 8888888L;        // long 类型变量long long e = 99999999LL; // long long 类型变量float f = 5.6f;           // float 类型变量double g = 10.8;          // double 类型变量long double h = 12.34L;   // long double 类型变量printf("a: %zu \n", sizeof(a)); // 输出为 1(char 类型)printf("b: %zu \n", sizeof(b)); // 输出为 2(short 类型)printf("c: %zu \n", sizeof(c)); // 输出为 4(int 类型)printf("d: %zu \n", sizeof(d)); // 具体大小依赖平台// 对于变量:sizeof 后面的括号是可选的printf("e: %zu \n", sizeof e); // 输出为 8(long long 类型)printf("f: %zu \n", sizeof f); // 输出为 4(float 类型)printf("g: %zu \n", sizeof g); // 输出为 8(double 类型)printf("h: %zu \n", sizeof h); // 输出为 16(long double 类型)return 0;
}

        程序在 VS Code 中的运行结果如下所示:

计算表达式的大小

        sizeof 也可以用于计算表达式的存储大小:

#include <stdio.h>int main()
{int d1 = 10;double d2 = 20.0;// printf("表达式(d1 + d2):%zu \n", sizeof d1 + d2);  // 不加括号这里输出会出问题,printf("表达式(d1 + d2)的存储大小:%zu \n", sizeof(d1 + d2)); // 加上括号当成一个整体// int 类型和 double 类型相加,结果是 double 类型,所以 sizeof(d1 + d2) 的结果是 8printf("表达式(1 + 2)的存储大小:%zu \n", sizeof(1 + 2)); // 4return 0;
}

        程序在 VS Code 中的运行结果如下所示:

2.3 注意事项

  1. 括号的可选性:
    • 对基本数据类型和表达式必须使用括号(如 sizeof(int))
    • 对变量或字面量可省略括号(如 sizeof a)
    • 建议:为了统一规范和代码可读性,建议在使用 sizeof 时,始终使用括号,无论是对数据类型、变量、字面量还是表达式。例如:sizeof(int)、sizeof(variableName)、sizeof(42)。
    类型提升:
    • 字符字面量(如 'a')在 sizeof 运算中会被提升为 int 类型
  2. 平台和编译器依赖性:
    • 数据类型的大小可能因平台和编译器而异(如 long 可能是 4 或 8 字节、long double 可能是 8 字节、10 字节、12 字节或 16 字节)。

相关文章:

16 C 语言布尔类型与 sizeof 运算符详解:布尔类型的三种声明方式、执行时间、赋值规则

1 布尔类型 1.1 布尔类型概述 布尔类型用于表示逻辑上的真&#xff08;true&#xff09;和假&#xff08;false&#xff09;两种状态&#xff0c;是编程中条件判断和逻辑运算的基础。在 C 语言中&#xff0c;布尔值的表示方式随着标准的发展而不断完善。 1.2 布尔类型的三种声…...

配置ssh服务-ubuntu到Windows拷贝文件方法

背景&#xff1a; 在工作中&#xff0c;需要频繁从ubuntu到Windows拷贝文件&#xff0c;但有时间总是无法拷出&#xff0c;每次重启虚拟机又比较麻烦并且效率较低。可以使用scp服务进行拷贝&#xff0c;不仅稳定而且高效&#xff0c;现将配置过程进行梳理&#xff0c;以供大家参…...

使用ts-node搭建typescript运行环境

目录 首先安装好node.js 安装typescript 安装ts-node 创建一个typescript文件 使用ts-node运行typescript文件 首先安装好node.js 安装typescript npm install typescript4.7.4 -g 安装ts-node npm install ts-nodev10.8.1 -g 创建一个typescript文件 文件名为app.ts&a…...

如何深入学习MATLAB的高级应用?

文章目录 要深入学习 MATLAB 的高级应用&#xff0c;需要在掌握基础语法后&#xff0c;系统性地学习特定领域的工具箱和算法&#xff0c;并通过实战项目提升能力。以下是分阶段的学习路径和资源推荐&#xff1a; 一、深化核心技能 高级矩阵运算与线性代数 matlab % 稀疏矩阵处…...

英汉 “语言” 初印象:符号背后的文化底色​

英汉 “语言” 初印象&#xff1a;符号背后的文化底色​ ​ 原始尺寸更换图片 ​​ 在生活里&#xff0c;我们每天都会进行各式各样的交流&#xff0c;或许不曾留意&#xff0c;汉语和英语这两种极具代表性的语言&#xff0c;从最简单的问候语中就能展现出它们独特的文化内…...

C语言_编译全攻略_从原理到实战的深度解析

在 C 语言开发中,编译是连接源代码与可执行程序的关键桥梁。理解编译过程不仅能提升开发效率,更能帮助我们定位内存泄漏、性能瓶颈等深层次问题。本文将从编译原理出发,结合 GCC 工具链,带你掌握 C 语言编译的核心技术。 一、编译流程底层原理 1. 编译四阶段详解 预处理…...

AGI大模型(21):混合检索之混合搜索

为了执行混合搜索,我们结合了 BM25 和密集检索的结果。每种方法的分数均经过标准化和加权以获得最佳总体结果 1 代码 先编写 BM25搜索的代码,再编写密集检索的代码,最后进行混合。 from rank_bm25 import BM25Okapi from nltk.tokenize import word_tokenize import jieb…...

Vue3学习(组合式API——ref模版引用与defineExpose编译宏函数)

目录 一、ref模版引用。 &#xff08;1&#xff09;基本介绍。 &#xff08;2&#xff09;核心基本步骤。(以获取DOM、组件为例) &#xff08;3&#xff09;案例&#xff1a;获取dom对象演示。 <1>需求&#xff1a;点击按钮&#xff0c;让输入框聚焦。 &#xff08;4&…...

Zephyr OS 中的 FIFO 接口应用介绍

目录 概述 1 FIFO的接口函数 1.1 K_FIFO_DEFINE函数 1.2 k_fifo_init函数 1.3 k_fifo_put函数 1.4 k_fifo_get 函数 1.5 k_fifo_is_empty 函数 2 应用验证 2.1 UART中使用FIFO范例 2.2 生产-消费类型范例 3 注意事项 3.1 内存管理 3.2 线程安全边界 概述 Zephy…...

前端基础之CSS

基本语法规范 引入方式 1.内部引入 <style>p{color:blue ;font-size:30px;}</style> 2.行级引入 <p style "color : green ;font-size : 40px;">hello ,wyx</p><p>hello , wyx1</p><h1>hello , wyx2</h1> 3.外…...

【Linux网络】DNS与ICMP

DNS(Domain Name System) DNS是一整套从域名映射到IP的系统。 DNS背景 TCP/IP使用IP地址和端口号来确定网络上的一台主机的一个程序。但是IP地址不方便记忆。 于是人们发明了一种叫主机名的东西&#xff0c;是一个字符串&#xff0c;并且使用hosts文件来描述主机名和IP地址的…...

第二十七天打卡

一些函数 for i in range(2, 10000):if is_prime(i):print(i) if ...: 这是 Python 里的条件判断语句&#xff0c;当 is_prime(i) 的返回值为 True 时&#xff0c;就会执行 if 语句块里的代码。 func.__name__ 的作用 func.__name__ 是 Python 中函数对象的一个特殊属性&am…...

38-日语学习小程序

系统功能特点&#xff1a; 技术栈: springBootVueMysqlUni-app 功能点: 用户端 管理员端 用户端: 1.首页: 轮播图展示、N2词汇列表、网站公告列表 2.学习模块: 有五十音图 词汇 语法 3.社区模块: 可进行发帖 也可查看帖子进行回复 可查看小组 4.我的: N2词汇(点击查看详情…...

信贷风控笔记6——风控常用指标(面试准备14)

一、PSI&#xff1a; 1.计算过程&#xff1a;变量分箱10-20箱&#xff1b;统计各分箱内样本占比&#xff1b; 算各个分箱的index&#xff08;实际占比-预期占比&#xff09;*ln&#xff08;实际占比/预期占比&#xff09;&#xff1b; 将各分箱index求和得PSI 2.情况分类&…...

UDP三种通信方式

单播&#xff08;Unicast&#xff09; 单播是最常见的通信方式&#xff0c;数据从一个发送方传输到一个特定的接收方。发送方将数据包发送到接收方的IP地址和端口号&#xff0c;接收方通过监听指定的端口接收数据。单播适用于一对一的通信场景。 import java.net.DatagramPac…...

Windows运维工具批处理版

测试环境&#xff1a;windows10 必看&#xff1a; 1.新建记事本&#xff0c;另存为&#xff1a;文件类型所有文件&#xff0c;文件名运维.bat&#xff0c;编码ansi&#xff0c;复制代码&#xff0c;保存&#xff0c;双击运行 2.有的功能需要输入管理员密码&#xff0c;如果没…...

无需配置光猫,使用网管交换机配合路由器的IPTV功能实现单线复用

一、背景 弱电箱和电视柜只预留了一根网线&#xff0c;路由器放在电视柜&#xff0c;想实现既可以上网又可以正常观看iptv&#xff0c;本文提供了一种方法。 二、准备工作 1、带iptv功能的路由器&#xff1b;2、水星sg105pro网管交换机&#xff1b;3、网线若干&#xff1b; …...

Elasticsearch 官网阅读之 Term-level Queries

Term-level Queries 参考&#xff1a;https://www.elastic.co/docs/reference/query-languages/query-dsl/query-dsl-exists-query 一、Term Query Term Query 是 term 精准查询。需要注意的是&#xff0c;在进行 Term Query 的时候&#xff0c;要避免 text 类型的字段&#x…...

医疗大模型技术演进与行业应用全景

摘要 本文系统梳理医疗大模型技术架构的三大演进阶段,深度解析Transformer架构优化、多模态融合、模型压缩等核心技术突破。结合Google Med-PaLM、启真医疗大模型等16个典型行业案例,揭示医疗大模型在诊断辅助、药物研发、医院管理等九大场景的应用成效。基于权威评测数据,…...

【软考 McCabe度量法】

McCabe度量法&#xff08;McCabe’s Cyclomatic Complexity&#xff09;是由Thomas McCabe提出的一种用于衡量程序模块环路复杂性的软件度量方法。它通过分析代码的控制流结构来评估程序的复杂度&#xff0c;帮助开发者识别难以维护或测试风险较高的代码区域。 一、McCabe度量法…...

LabVIEW光谱信号仿真与数据处理

在光谱分析领域&#xff0c;LabVIEW 凭借其图形化编程、丰富函数库及强大数据处理能力&#xff0c;成为高效工具。本案例将介绍如何利用 LabVIEW 仿真光谱信号&#xff0c;并对实际采集的光谱数据进行处理&#xff0c;涵盖信号生成、数据采集、滤波、分析及显示等环节。 ​ 一…...

从零开始认识 Node.js:异步非阻塞的魅力

Node.js 是一个基于 Chrome V8 引擎 的 JavaScript 运行时环境&#xff0c;用于在服务器端运行 JavaScript 代码。它的设计目标是让开发者能够用 JavaScript 构建高性能、可扩展的网络应用。以下是关于 Node.js 的详细介绍&#xff1a; 1. 核心特点 事件驱动与非阻塞 I/O&…...

ECMAScript 2018(ES2018):异步编程与正则表达式的深度进化

1.版本背景与发布 发布时间&#xff1a;2018年6月&#xff0c;由ECMA International正式发布&#xff0c;标准编号为ECMA-262 9th Edition。历史意义&#xff1a;作为ES6之后的第三次年度更新&#xff0c;ES2018聚焦于异步编程、正则表达式和对象操作的标准化&#xff0c;推动…...

【gitee 初学者矿建仓库】

简易的命令行入门教程: Git 全局设置: git config --global user.name "你的名字"触摸 git config --global user.email "你的邮箱"创建 git 仓库: mkdir codestore cd codestore git init -b "main" touch README.md # 选择运行 git add REA…...

Java 类和对象

文章目录 类和对象实例化对象this构造和初始化封装访问修饰限定符包自定义包 static代码块 类和对象 Java当中一切皆对象对象是什么呢&#xff1f; 比如是一个人&#xff0c;手机等怎么描述对象呢&#xff1f; 可以用类描述对象&#xff0c;可以理解类为一个模版&#xff0c;用…...

湖北理元理律师事务所:科学债务管理模型构建实录

债务问题本质是资源错配问题。湖北理元理律师事务所基于400案例的司法大数据&#xff0c;提炼出一套“三阶九步”债务管理模型&#xff0c;本文从技术视角解析其运作逻辑与实操价值。 模型架构&#xff1a;从诊断到执行的全周期管理 阶段一&#xff1a;债务体检&#xff08;1…...

JavaScript vs Python 用于 Web Scraping(2025):终极对比指南

1. 引言 在不断发展的 Web Scraping 领域&#xff0c;选择合适的编程语言对于项目的成功至关重要。虽然 JavaScript 和 Python 在 2025 年仍然是 Web Scraping 领域的热门选择&#xff0c;但它们各自具备不同的优势和挑战。 本指南将深入分析 JavaScript 和 Python 的核心特性…...

数据结构day3

一、gdb调试 gcc -g main.c linklist.c // 对两个.c文件进行编译,生成 a.out 文件 gdb a.out //调试可执行文件 a.out b linklist.c:36 // 在该.c文件第 36 行设置断点 r // 运行程序,但会在断点前停…...

VSCode launch.json 配置参数详解

使用 launch.json 配置调试环境时&#xff0c;会涉及到多个参数&#xff0c;用于定义调试器的行为和目标执行环境。以下是一些常用的配置参数&#xff1a; 1、"type" &#xff1a;指定调试器的类型&#xff0c;例如 "node" 表示 Node.js 调试器&#xff0…...

[已解决] LaTeX “Unicode character“ 报错 (中文字符处理)

问题&#xff1a; 写 LaTeX 文档&#xff0c;特别是包含中文时&#xff0c;经常遇到类似下图的 “Unicode character XXXXXX” 报错 (X) Unicode character 本 (U672C) LaTeX [行 xx, 列 x] (X) Unicode character 报 (U62A5) LaTeX [行 xx, 列 x] ...这通常意味着我们的 LaTe…...

c++成员函数返回类对象引用和直接返回类对象的区别

c成员函数返回类对象引用和直接返回类对象的区别 成员函数直接返回类对象&#xff08;返回临时对象&#xff0c;对象拷贝&#xff09; #include <iostream> class MyInt { public:int value;//构造函数explicit MyInt(int v0) : value(v){}//加法操作,返回对象副本&…...

python项目参考文献

技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文…...

Go语言实现链式调用

在 Go 语言中实现链式调用&#xff08;Method Chaining&#xff09;&#xff0c;可以通过让每个方法返回对象本身&#xff08;或对象的指针&#xff09;来实现。这样每次方法调用后可以继续调用其他方法。 示例&#xff1a;实现字符串的链式操作 假设你想对一个字符串连续执行…...

深入解析SpringMVC:从入门到精通

上文了解到SpingBoot的相关知识&#xff0c;此文开启Sping家族下的新篇章 1. 什么是SpringWebMVC&#xff1f; 官方对于SpringMVC的描述是这样的&#xff1a; 什么是Servlet呢? Servlet 是⼀种实现动态页面的技术.准确来讲Servlet是⼀套JavaWeb开发的规范&#xff0c;或者说…...

Java-Collections类高效应用的全面指南

Java-Collections类高效应用的全面指南 前言一、Collections 类概述二、Collections 类的基础方法2.1 排序操作2.1.1 sort方法2.1.2 reverse方法2.1.3 shuffle方法 2.2 查找与替换操作2.2.1 binarySearch方法2.2.2 max和min方法2.2.3 replaceAll方法 三、Collections 类的高级应…...

微软家各种copilot的AI产品:Github copilot、Microsoft copilot

背景 大家可能听到很多copilot&#xff0c;比如 Github Copilot&#xff0c;Microsoft Copilot、Microsoft 365 Copilot&#xff0c;有什么区别 Github Copilot&#xff1a;有网页版、有插件&#xff08;idea、vscode等的插件&#xff09;&#xff0c;都是面向于程序员的。Mi…...

JAVA EE_HTTP

为什么意气风发的少年&#xff0c;总是听不进去别人的劝解。 ​​​​​​​ ​​​​​​​ ----------陳長生. ❀主页&#xff1a;陳長生.-CSDN博客❀ &#x1f4d5;上一篇&#xff1a;JAVA EE_网络原理_数据链路层-CSDN博客 1.HTTP 1.1.HTTP是什么 H…...

SEO 优化实战:ZKmall模板商城的 B2C商城的 URL 重构与结构化数据

在搜索引擎算法日益复杂的今天&#xff0c;B2C商城想要在海量信息中脱颖而出&#xff0c;仅靠优质商品和营销活动远远不够。ZKmall模板商城以实战为导向&#xff0c;通过URL 重构与结构化数据优化两大核心策略&#xff0c;帮助 B2C 商城实现从底层架构到搜索展示的全面升级&…...

使用HtmlAgilityPack采集墨迹天气中的天气数据

需要解析对应的HTML源码&#xff1a; <div class"left"><div class"wea_alert clearfix"><ul><li><a href "https://tianqi.moji.com/aqi/china/jiangxi/hukou-county" >< span class"level level_2&qu…...

广和通L610模块通过AT指令访问服务器方案:嵌赛使用

实现步骤及关键点&#xff1a; 网络连接配置 ATCGDCONT1,"IP","APN名称" // 设置APN ATCGACT1,1 // 激活PDP上下文 ATCGATT1 // 附着GPRS网络 HTTP协议支持验证 L610支持HTTP客户端功能&#xff0c;关键指…...

nodejs快速入门到精通1

参考 nodejs快速入门到精通 菜鸟教程-nodejs nodejs官方文档 原因 视频免费 资料收费 笔记还是自己写吧 安装 nodejs官网 windows下&#xff1a; #查看nodejs版本 node -v #查看npm版本 npm -v #设置npm为淘宝镜像源 npm config set registry https://registry.npmmirror.…...

Linux下软件安装

一、软件安装方式 在 Linux 系统中&#xff0c;常见的软件安装方式有以下几种&#xff1a; 包管理器安装&#xff08;如 yum、apt&#xff09; 这是最便捷的安装方式&#xff0c;通过系统自带的包管理器从官方软件源下载并安装软件。 # CentOS/RHEL系统使用yum安装 yum insta…...

React Fiber 架构深度解析:时间切片与性能优化的核心引擎

文章目录 前言一、Fiber 架构的诞生背景二、Fiber 架构的核心概念1. Fiber 节点2. Fiber 节点的结构3. 双缓存机制4. 增量渲染与优先级调度 三、时间切片技术详解1. 时间切片的定义与原理2. 时间切片与 JavaScript 事件循环3. 时间切片的实现方式4. 时间切片的优势 四、Fiber 架…...

mcp学习笔记

MCP&#xff08;Model Context Protocol&#xff09;是一种由Anthropic推出的开放协议&#xff0c;旨在统一大型语言模型&#xff08;LLM&#xff09;与外部数据源/工具之间的交互。其核心组件包括 ​MCP Client、MCP Server​ 和 ​Function Calling​ 机制&#xff0c;三者协…...

鸿蒙北向源码开发: 检查应用接口dts文件api规范性

开源鸿蒙5.0.2对应的api版本是14 5.0社区仓有工具检查接口规范性报告工具: interface/sdk-js/build-tools/api_check_plugin api_check_plugin是什么? 在解释api_check_plugin是什么之前得先知道 应用调用的api接口都是文件名后缀为.d.ts的文件,这些文件内部声明了arkts的a…...

Redis设计与实现——分布式Redis

Redis Sentinel&#xff08;哨兵&#xff09; Sentinel 的工作机制 故障检测&#xff08;Failure Detection&#xff09; 主观下线&#xff08;Subjective Down&#xff09;&#xff1a;单个 Sentinel 实例检测到主节点在30 秒内无响应&#xff0c;标记其为 SDOWN。 客观下线…...

【Redis】Hash 哈希

文章目录 常用命令hsethgethmgethexistshkeyshvalshgetallhdelhlenhsetnxhincrbyhincrbyfloat 内部编码应用场景 Redis 存储键值对&#xff0c;也就是 key - value&#xff0c;不过同时也允许 value 也为键值对&#xff0c;但此时为了避免冲突&#xff0c;为 field - value PS…...

【matlab技巧】通过手绘的方法设计二维运动轨迹,附MATLAB程序

代码提供了一种直观的方式来使用鼠标在图形窗口中绘制线条&#xff0c;同时能够记录并显示用户绘制的轨迹坐标。用户通过左键点击绘制点&#xff0c;右键点击结束绘制&#xff0c;适合用于简单的图形交互和数据可视化。 文章目录 代码作用运行MATLAB源代码代码详解 代码作用 这…...

游戏引擎学习第290天:完成分离渲染

game_sim_region.cpp&#xff1a;在BeginSim中移除EntityOverlapsRectangle调用 现在我们接近一个关键点&#xff0c;虽然还没完全结束&#xff0c;但我们已经把所有东西迁移到了一个新概念上——即那些临时创建的控制器结构&#xff0c;称为“脑”&#xff08;brains&#xf…...

uniapp-商城-61-后台 新增商品(添加商品到数据库)

完成商品的布局&#xff0c;完成商品的属性添加&#xff0c;最后的目的还是要完成数据添加&#xff0c;将我们前台的数据添加后台的数据库。 1、界面 2、点击提交完成商品添加 点击下方的提交按钮&#xff0c;将数据添加到数据库。 onSubmit 使用该函数---见3 <view cla…...