《C语言程序设计现代方法》note-4 基本类型 强制类型转换 类型定义

文章目录

    • 助记提要
    • 7章 基本类型
      • 7.1 整数类型
        • 有符号整数和无符号整数
        • 整数类型的说明符
        • 整数类型的范围
        • 整型常量
        • 整数溢出
        • 读/写整数
      • 7.2 浮点类型
        • 浮点数的范围
        • 浮点常量
        • 读/写浮点数
      • 7.3 字符类型
        • 字符被当做整数来操作
        • 转义序列
        • 大小写转换
        • `scanf`和`printf`读/写字符
        • `getchar`和`putchar`读写字符
      • 7.4 类型转换
        • 类型转换的必要性
        • 发生隐式转换的情况
        • 常规算术转换
        • 赋值时的转换
        • 强制类型转换
      • 7.5 类型定义
        • 类型定义的好处
      • 7.6 sizeof运算符

助记提要

  1. 6种整数类型;
  2. 如何确定整数类型的范围;
  3. 编译器如何确定整型常量的范围;
  4. 整数溢出时的行为;
  5. 读写整数的转换说明符;
  6. 浮点数的范围;
  7. 数字转义序列;
  8. getchar的惯用法;
  9. 需要类型转换的原因;
  10. 会发生隐式转换发生的4个情况;
  11. 常规算数转换和赋值转换的规则;
  12. 强制类型转换的应用;
  13. typedef的优点;
  14. sizeof的2个注意事项;

7章 基本类型

7.1 整数类型

有符号整数和无符号整数

最左边带符号位的是有符号整数。正数或0的符号位是0;负数的符号位是1。
不带符号位的整数是无符号整数,最左边的位也是数值的一部分。无符号整数主要用于系统编程和底层与机器相关的应用。

C语言的整数默认都是有符号的。如果要告诉编译器变量没有符号位,需要把它声明为unsigned类型。

整数类型的说明符

除了int外,C语言还提供了长整型和短整型,用来存储大数或存小数节省空间。
为了使构造的整数类型满足需要,可以指明变量是long类型或short类型,signed类型或unsigned类型。也能把说明符组合起来,产生以下6种不同的类型:

short int
unsigned short int
int 
unsigned int
long int
unsigned long int

其他组合都是这6种类型的同义词。

由于整数默认都是有符号的,所以signed可以省略。
C语言允许省略int来缩写整数类型的定义。unsigned short int可以写为unsigned short
说明符的先后顺序不影响类型声明。

为了满足对超大型整数的需求和适应64位的处理器,C99提供了long long intunsigned long long int两种类型。

整数类型的范围

C标准要求每个整型类型都要覆盖一个确定的取值范围。
其次,short int类型不能比int类型长,long int类型不能比int类型短。

在不同的机器上,通常的取值范围如下:
16位机

类型最小值最大值
short int
int
-215215-1
unsigned short int
unsigned int
02^16-1
long int-231231-1
unsigned long int0232-1
32位机
类型最小值最大值
:----:----::----:
short int-215215-1
unsigned short int02^16-1
long int
int
-231231-1
unsigned long int
unsigned int
0232-1
64位机
类型最小值最大值
:----:----::----:
short int-215215-1
unsigned short int02^16-1
int-231231-1
unsigned int0232-1
long int-263263-1
unsigned long int0264-1

这些范围不是C标准强制的,不同的编译器也可能不同。
C标准库有<limits.h>头,其中定义了每种整数类型的最大值和最小值的宏,可以用它来确定某个实现中整数类型的范围。

C99的long long int类型要求至少是64位宽。long long int范围通常是-263到263-1,而unsigned logn long int是0到264-1。

整型常量

C语言允许用十进制、八进制和十六进制的形式书写整型常量。

  • 十进制常量包含0~9的数字,但是不能以0开头。
  • 八进制常量包含0~7的数字,必须以0开头。
  • 十六进制常量包含09的数字和af的字母,总是以0x开头。字母大写或小写都可以。

不同进制只是数的书写方式,所有的数都是二进制的形式存储的。
八进制和十六进制更适用于底层程序的编写。

编译器如何判断常量的类型
十进制的常量类型一般为int,如果int不够,就用long int类型。long int也不够,则用unsigned long int做最后的尝试。
而对八进制和十六进制,编译器会一次尝试intunsigned intlong intunsigned long int类型,直到找到能表示该常量的类型。

C99对于没有后缀的十进制常量,会使用intlong intlong long int中可表示该值的最小类型。对于八进制和十六进制常量,类型判定顺序为intunsigned intlong intunsigned long intlong long intunsigned long long int

在常量后面加上字母Ll,可以强制编译器把常量做为长整数处理。在常量后加Uu,可以指定无符号常量。LU可以结合使用。
C99中以LLll结尾的整型常量是long long int类型。

整数溢出

算数运算时,结果可能因为太大而无法表示。
对两个int进行算数运算时,结果必须仍然可以用int表示,否则就会发生溢出。

整数溢出时的行为和整数的负号有关:

  • 有符号整数溢出的行为是未定义的。可能只是运算出错,也可能程序崩溃。
  • 无符号整数溢出时,结果是正确值对2n取模。n是存储结果的位数。
读/写整数
  • %d只适用于int类型。
  • 无符号整数,使用%u%o%x分别表示十进制、八进制、十六进制。
  • 短整数在d、o、u、x前面加上h
  • 长整数在d、o、u、x前面加上l
  • 长长整数(C99)在d、o、u、x前面加上ll
unsigned int u;
scanf("%u", u);     // 读入十进制
printf("%u", u);    // 显示十进制
scanf("%o", u);     // 读入八进制
printf("%o", u);    // 显示八进制
scanf("%x", u);     // 读入十六进制
printf("%x", u);    // 显示十六进制short s;
scanf("%hd", s);    // 读入短整型
printf("%hd", s);   // 显示短整型long l;
scanf("%ld", l);    // 读入长整型
printf("%ld", l);   // 显示长整型long long ll;
scanf("%lld", ll);  // 读入长长整型
printf("%lld", ll); // 显示长长整型

%x%o只适合用于显示无符号整数或正数。因为printf会假设被转换的数值是无符号的,如果符号位为1,会显示一个预期外的大数。
显示负数的八进制或十六进制的情况很少。需要显示时可以自己输出一个负号。

7.2 浮点类型

C语言的浮点数格式有三种:float,单精度浮点数;double,双精度浮点数;long double,扩展精度浮点数。

浮点数的范围

C标准没有规定floatdoublelong double类型的精度。大多数计算机遵循IEEE标准。

IEEE标准提供了单精度和双精度的格式标准。单精度32位,双精度64位。
数值义科学计数法存储,每个数由符号指数小数组成。指数部分表示数值的可能大小,小数部分的位数表示精度。

单精度数,指数占8位,小数占23位。单精度数可以表示的最大值是由指数决定的,指数范围-126到127(-127和128有特殊用途),指数最大是2127;32位小数位都是1时底数最大,最大底数约等于2。所以单精度数可表示的最大值为 2*2127≈3.402*1038

浮点常量

浮点常量必须包含小数点或指数。如果有指数,需要在指数值前面加字母eE

默认情况下,浮点常量以double的形式存储,在需要时可以自动转为float
为了让编译器以float格式存储,可以在常量的末尾加上字母Ff;要以long double格式存储,在末尾加Ll

C语言默认倾向于使用精度更高的double类型。用float类型是为了节省空间和时间。

读/写浮点数
  • float类型
    %e%f%g用于读写单精度浮点数。

  • double类型
    scanf函数读取double类型时,在前面加小写字母l
    printfefg既可以写float也可以写double。C99允许printf函数使用%le%lf%lg,但是字母l不起作用。

    scanf和printf函数有可变长度的参数列表。调用可变长度的参数列表时,编译器会把float参数自动转成double类型。这导致printf无法区分float和double,所以%f在printf中既可以表示float又可以表示double。而scanf是读取的值要通过指针传给变量,%f%lf必须区别开,才能正确存储对应的字节数。

    double d;
    scanf("%lf", &d);
    printf("%f", d);
    
  • long double类型
    读写long double类型时,在前面加大写字母L

    long double ld;
    scanf("%Lf", &ld);
    printf("%Lf", ld);
    

十六进制浮点常量以0x0X开头,且必须包含指数(跟在字母p或P后面)。指数以十进制表示,可以为负,代表2的幂。如:0x1.Bp3表示1.6875 × 2^3^ = 13.5
十六进制浮点常量主要用于指定精度要求较高的浮点常量。十进制数在转为二进制时可能受到舍入误差的影响,而十六进制有精确的二进制表示。

7.3 字符类型

char字符类型的值依据机器的字符集来定。
目前最常用的字符集是美国信息交换标准码(ASCII)字符集。它使用7位代码来表示128个字符。

char类型的变量可以用任意的单个字符赋值。赋值时,字符常量需要使用单引号括起来,不能用双引号。

字符被当做整数来操作

C语言把字符当做小整数进行处理。
计算中出现字符时,C语言只是使用它对应的整数值。可以像比较数字那样对字符进行比较。

以数字的方式处理字符的坏处是,编译器无法发现处理过程中的编程错误。程序在使用不同字符集的机器上也可能会不兼容。

字符类型的符号
C标准没有规定char类型的数据是有符号还是无符号型。有些编译器把它们当做有符号型来处理,有些编译器当做无符号型处理。
为了保证可移植性,不要假设char类型默认是signedunsigned。在需要作区别的时候,使用signed charunsigned char

声明为char的变量存储的字符如果只有7位长度,不需要考虑其符号。如果有8位长度,许多编译器会把它当做有符号的字符来处理。后面这个变量只作为字符使用就不会有问题,但是如果需要转换为整数,就可能会有问题(结果为负数)。

转义序列

一些特殊字符无法用键盘输入,或不可见。使用转义序列可以让程序处理字符集中的每一个字符。
转义序列有两种:字符转义序列和数字转义序列

  • 字符转义序列
字符转义序列说明
\a警报符
\b回退符
\f换页符
\n换行符
\r回车符
\t水平制表符
\v垂直制表符
\\反斜杠
?问号
单引号
"双引号

字符转义序列很易使用,但是只包含了最常用的字符。有些无法打印的字符和ASCII码以外的字符没有被包含在内。
而数字转义序列可以表示任何字符。

  • 数字转义序列

字符的八进制和十六进制值可以用来书写转义序列。
使用八进制做转义序列时,由字符\和跟在后面的最多含3位数字的八进制数组成。如\33\033
十六进制转义序列由\x和跟在后面的十六进制数组成。

int main() {printf("%c\n", 'a');printf("%d\n", 'a');printf("\141\n");printf("\x61\n");return 0;
}
a
97
a
a

八进制和十六进制转义序列表示的数必须为无符号数,所以八进制值最大为377。标准C对十六进制数的位数没有限制,在字符长度为8位时,十六进制值最大为FF。

大小写转换

使用if语句可以把小写字母转换为大写字母:

if ('a' <= ch && ch <= 'z')ch = ch - 'a' + 'A';

也可以使用C语言的库函数toupper

#include <ctype.h>ch = toupper(ch);
scanfprintf读/写字符

使用转换说明符%c对单个字符读写:

char ch;
scanf("%c", &ch);
printf("%c", ch);

scanf在读取数值时,会自动跳过空白符,但是读取字符时不会。
为了强制它读入字符前跳过空白字符,可以在转换说明的前面加一个空格:

scanf(" %c", &ch);

scanf不跳过空白符的特性可以用来检查是否是输入行的结尾。

getcharputchar读写字符

getchar读入一个字符并返回。putchar输出单个字符。
getcharputchar的执行速度比scanfprintf要快。因为不需要考虑数据的不同格式,而且getcharputchar是做为宏实现的。
getchar在读取时也不会跳过空白符。
scanf函数的返回值一般是1。而getchar函数返回的是读取到的字符。由此getchar能很方便的应用在需要对字符做条件判断的地方。

// scanf实现
do {scanf("%c", &ch);
} while (ch != '\n');// 使用getchar
while ((ch=getchar()) != '\n');

getchar常用的两种场景:

// 跳过剩余的行
while (getchar() != '\n');
// 跳过空格。循环结束时,ch的值为遇到的第一个非空字符
while ((ch=getchar()) != ' ');

注意 混用scanfgetchar时,由于scanf会把没有消耗的任意字符留下,getchar取到的字符可能不是希望的结果:

printf("Enter an integer: ");
scanf("%d", &i);
printf("Enter a command: ");
// command取到换行符
command = getchar();

7.4 类型转换

类型转换的必要性

C语言允许在表达式中混合使用基本类型。而计算机执行算术运算时,要求操作数有相同的位数,和相同的存储方式。
C编译器会自动生成一些指令,把操作数转换为合适的类型,这样表达式才能被硬件计算。
这种编译器自动处理的转换称为隐式转换。而由程序员使用强制运算符执行的是显式转换

发生隐式转换的情况
  1. 算术表达式或逻辑表达式中的操作数类型不同(常规算术转换);
  2. 赋值表达式右侧表达式的类型和左侧变量的类型不匹配;
  3. 函数调用的实参类型和形参类型不匹配;
  4. return语句中表达式类型和函数返回值类型不匹配。
常规算术转换

常规算术转换会把两个操作数转换为可以安全地适用于两个数值的存储位数最小的类型。
通常是把存储位数较少类型的操作数转换为另一个操作数的类型。这种操作称为提升

常规算术转换可以分成两种情况:

  1. 任一操作数是浮点类型
    float->double->long double的顺序,对存储位数小的操作数做提升。
  2. 两个操作数都不是浮点类型
    先把两个操作数进行整值提升(确保没有字符型或短整型操作数),然后按int->unsigned int->llong int->unsigned long int的顺序提升存储位数小的操作数。
    如果出现long intunsigned int类型长度相同的情况,两个操作数会转换为unsigned long int类型。

注意 有符号操作数和无符号操作数混用时,有符号操作数会转换为无符号的值。转换过程会加上或者减去n+1的倍数。n是无符号整数可表示的最大值。实际编程时要避免使用无符号整数,更不要和有符号整数混用。

int main() {// 混合比较有符号整数和无符号整数int a = -1;unsigned int b = 5;printf("%d\n", (a<b));	// 输出结果为0,不符合预期return 0;
}

C99中增加了一些新的类型,转换规则也有变化。它先规定了整数类型的转换等级:

  1. (最高)long long intunsigned long long int
  2. long intunsigned long int
  3. intunsigned int
  4. short intunsigned short int
  5. charsigned charunsigned char
  6. (最低)_Bool

C99在任一操作数是浮点类型时,规则同上。在两个操作数都不是浮点类型时,依次执行以下判定:

  1. 先把转换等级低于intunsigned int的类型转为intunsigned int,如果这时两个操作数类型相同,就结束转换;
  2. 如果都是有符号型,或都是无符号型,把转换等级低的操作数转换为等级高的操作数类型;
  3. 如果无符号操作数等级高于或等于有符号操作数,转为无符号操作数的类型;
  4. 如果有符号操作数的类型可以表示无符号操作数类型的所有值,转为有符号操作数的类型;
  5. 其他情况,都转换为与有符号操作数的类型对应的无符号类型。
赋值时的转换

赋值时会把右边表达式转换为左边变量的类型。
这种规则出问题的情况:

  1. 浮点数赋值给整型变量时,小数部分丢失;
  2. 过大的值赋值给存储位数较小的类型变量时,会得到无意义的结果。
强制类型转换

强制类型转换的表达式

(将转换的类型名) 表达式

C语言把(类型名)视为一元运算符,其优先级高于二元运算符。

强制类型转换的应用:

// 计算浮点型值的小数部分
float f, frac_part;
frac_part = f - (int) f;
// 避免溢出
long i1, i2;
int j = 100000;
// 由于两个int相乘,结果还是int类型,因此可能会溢出
// 溢出后,把错误的值转为long
i1 = j * j;
// 先把j转为long再计算可避免溢出
i2 = (long) j * j;

7.5 类型定义

前面使用宏定义布尔类型

#define BOOL int

可以使用类型定义语句实现布尔类型:

typedef int Bool;

Bool是新类型的名字。首字母不是必须大写。

typedef定义的类型会加入到编译器识别的类型名列表中。

类型定义的好处
  • 能使程序更易于理解,后续需要修改类型也更方便。

    // 可以在这里修改Dollars的类型
    typedef float Dollars;
    // 易于理解
    Dollars cash_in, cash_out;
    
  • 提高易移植性。
    不同机器上的类型取值范围可能是不同的。
    可以使用typedef定义新的类型,避免使用int或其他可能因机器而变化的类型声明。这样在需要更改更大的数据类型时很方便,但是要修改转换说明(如%d改为%ld)依然很麻烦。

    C语言库使用typedef为可能因实现而不同的类型创建类型名,这些类型名一般以_t结尾。
    C99的<stdint.h>头中使用typedef定义占用特定位数的整数类型名。如int32_t是占用32位的有符号整型。

  • 比宏定义更好用
    数组和指针不能定义为宏,但是类型定义可以。
    函数体内typedef定义的名称在函数体外是不识别的。而宏的名称会在任何出现的地方被替换。

7.6 sizeof运算符

用于获取存储指定类型的值需要的内存空间

sizeof(类型名)

返回值是一个无符号整数,表示存储某个类型的字节数。
sizeof也可以用于常量、变量和表达式。
sizeof用于表达式时不需要加圆括号,但是它做为一元运算符,优先级比二元运算符高,使用时为了方便理解,最好加上圆括号。

// 不需要加圆括号也可以
// 先获取i的存储位数,然后再把结果与j相加
sizeof i + j;
// 最好加上圆括号,便于理解
sizeof(i + j);

注意 sizeof表达式的值是size_t类型,由实现决定的类型。
在C89中最好在转换前把表达式的值转换为一种已知类型,并在显示时使用对应的转换说明符。
C99中的printf可以直接显示size_t的值,不发生强制转换,方法是在转换说明中使用字母z

printf("%zu\n", sizeof(int));

C99引入了变长数组,编译器不能用sizeof确定变长数组的大小。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/472284.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ADC输出码和输入电压转换关系

ADC输出码和输入电压转换关系 转换公式&#xff1a;ADC输出码(Vin / Vref) *2n 。其中Vin 是输入ADC芯片的电压&#xff0c;Vref是参考电压&#xff0c;n是ADC芯片的位数。 举个例子MS5182是一个16bit的ADC&#xff08;21665536&#xff09;&#xff0c;参考电压Vref4.096V&a…

IROS讲座:如何写出受欢迎的论文

讲座原名称&#xff1a;How to write papers people love reading 时间地点&#xff1a;2024年10月中旬&#xff0c;阿布扎比国家展览中心&#xff0c;阿联酋 演讲嘉宾照片&#xff1a; 以下是拍摄的部分PPT&#xff0c;并添加了中文笔记&#xff1a;

【Docker】Mac安装Docker Desktop导致磁盘剩余空间较少问题如何解决?

目录 一、背景描述 二、解决办法 三、清理效果 四、理论参考 解决方法 1. 清理未使用的 Docker 镜像、容器和卷 2. 查看 Docker 使用的磁盘空间 3. 调整 Docker 的存储位置 4. 增加磁盘空间 5. 调整 Docker Desktop 配置 6. 使用 Docker 清理工具&#xff08;例如 D…

Tiktok对接和内容发布申请流程

这段时间在搞AI生成视频&#xff0c;希望用户能一键发布到Tiktok&#xff0c;因此研究了一下Tiktok的开发者申请流程&#xff0c;发现好复杂&#xff0c;同时也发现Tiktok的开发也跟我一样&#xff0c;挺草台班子的 0、流程简述 废话不多说&#xff0c;Tiktok的开发者申请和…

Android ART知多少?

Android 虚拟机 ART&#xff08;Android Runtime&#xff09;是 Android 平台上的应用程序运行时环境&#xff0c;用于执行应用程序的字节码。ART 自 Android 5.0&#xff08;Lollipop&#xff09;开始取代了 Dalvik&#xff0c;成为 Android 的默认运行时环境。本文将从以下几…

黑马嵌入式开发入门模电基础学习笔记

学习视频: 黑马程序员嵌入式开发入门模电&#xff08;模拟电路&#xff09;基础 文章目录 背景介绍电流电压组件仿真三极管ne555PCBEDA案例&#xff1a;非接触式电笔案例&#xff1a;电子琴 背景介绍 电流 电压 组件 仿真 三极管 mos管 ne555 PCB EDA 案例&#xff1a;非接触…

Ubuntu 18 EDK2 环境编译

视频&#xff1a;在全新的Ubuntu上从零搭建UEFI的EDK2开发环境 开始&#xff1a;git clone https://github.com/tianocore/edk2.git 开始编译BaseTools前先更新一下子模块&#xff1a;git submodule update --init &#xff0c;然后&#xff1a;make -C BaseTools/ 问题1&a…

第9章 DIV+CSS布局

9.1 DIVCSS概述 DIVCSS是Web设计标准&#xff0c;它是一种网页的布局方法。与传统中通过表格&#xff08;table)布局定位的方式不同&#xff0c;它可以实现网页页面内容与表现相分离。DIV组成了网页的格局&#xff0c;CSS则装饰了格局&#xff0c;比如建一栋房子&#xff0c;…

QT QLineEdit失去焦点事件问题与解决

本文介绍如何获得QLineEdit的失去焦点事件和获得焦点的输入框也会触发失去焦点事件的问题&#xff01; 目录 一、QLineEdit获得失去焦点事件 1.自定义类继承自QLineEdit 2.重写 focusOutEvent 3.使用 二、失去焦点事件问题 1.问题描述 2.问题解决 三、源码分享 lineed…

微信小程序navigateTo:fail webview count limit exceed

theme: nico 你们好&#xff0c;我是金金金。 场景 uniapp编写微信小程序&#xff0c;使用uni.navigateTo跳转的过程中报错如下&#xff1a; 报错意思也非常明显了&#xff1a;errMsg":"navigateTo:fail webview 数量超出限制 排查 排查之前我先贴一下代码 代码非…

HarmonyOS ArkTs 解决流式传输编码问题

工作日志 日期&#xff1a;2024-11-15 标题&#xff1a;HarmonyOS ArkTs 解决流式传输编码问题 问题描述 问题&#xff1a;在处理流式数据的 HTTP 请求时&#xff0c;服务器返回的数据存在编码问题&#xff0c;导致数据无法正确地解码为字符串。部分数据在解码后出现了乱码…

Android Settings 单元测试 | 如何运行单元测试?

背景 在Android Settings 单元测试 | Telephony Network 模块 APN 案例中粗略介绍了单元测试逻辑内容&#xff0c;但是在独立APK里面如何将单元测试跑起来还是有疑问&#xff0c;因为APP不能直接install&#xff0c;无法借助Android Studio直接Run&#xff0c;在安装的一步会报…

flutter字体大小切换案例 小字体,标准字体,大字体,超大字体案例

flutter字体大小切换案例 小字体&#xff0c;标准字体&#xff0c;大字体&#xff0c;超大字体案例 Android iOS设备带有选择记录 我的flutter项目版本 environment: sdk: ‘>3.4.4 <4.0.0’ 图片案例 pubspec.yaml 添加依赖 # 屏幕尺寸适配 https://github.com/OpenF…

编译原理(手绘)

大家好&#xff0c;今天给大家分享一下我自己对c语言编译链接的一点见解&#xff08;本人是学生&#xff0c;有记笔记的习惯&#xff09;&#xff0c;那么今天就给大家分享我的笔记。 以上只是我本人的一些见解&#xff0c;并非绝对&#xff0c;欢迎大家一起交流。 那么今天分…

跳房子(弱化版)

题目描述 跳房子&#xff0c;也叫跳飞机&#xff0c;是一种世界性的儿童游戏&#xff0c;也是中国民间传统的体育游戏之一。 跳房子的游戏规则如下&#xff1a; 在地面上确定一个起点&#xff0c;然后在起点右侧画 n 个格子&#xff0c;这些格子都在同一条直线上。每个格子内…

初识Linux · 共享内存

目录 理解共享内存 Shared memmory code 理解共享内存 前文介绍的管道方式的通信&#xff0c;本文介绍的是进程通信的另外一种方式&#xff0c;即共享内存。但是这种通信方式的特点是只能本地通信&#xff0c;并且不像管道那样有保护机制&#xff0c;这里是没有的。 我们通…

机器学习day5-随机森林和线性代数1

十 集成学习方法之随机森林 集成学习的基本思想就是将多个分类器组合&#xff0c;从而实现一个预测效果更好的集成分类器。大致可以分为&#xff1a;Bagging&#xff0c;Boosting 和 Stacking 三大类型。 &#xff08;1&#xff09;每次有放回地从训练集中取出 n 个训练样本&…

Essential Cell Biology--Fifth Edition--Chapter one (6)

1.1.4.4 Internal Membranes Create Intracellular Compartments with Different Functions [细胞膜形成具有不同功能的细胞内隔室] 细胞核、线粒体和叶绿体并不是真核细胞中唯一的膜包围细胞器。细胞质中含有大量的[ a profusion of]其他细胞器&#xff0c;这些细胞器被单层膜…

基于VUE实现语音通话:边录边转发送语言消息、 播放pcm 音频

文章目录 引言I 音频协议音频格式:音频协议:II 实现协议创建ws对象初始化边录边转发送语言消息 setupPCM按下通话按钮时开始讲话,松开后停止讲话播放pcm 音频III 第三库recorderplayer调试引言 需求:电台通讯网(电台远程遥控软件-超短波)该系统通过网络、超短波终端等无线…

政务数据治理专栏开搞!

写在前面 忙忙碌碌干了一年政务数据治理的工作&#xff0c;从法人数据到自然人&#xff0c;从交通到地理信息等等&#xff0c;突发想法开一个专栏讲一讲政务数据遇到的问题&#xff0c;以及治理的成效&#xff0c;或许有朋友爱看。 政务数据&#xff0c;又称之为政务数据资源&a…