3.2 数据的表现形式及其运算

 

3.2.1 常量和变量

在计算机高级语言中,数据有两种表现形式:常量和变量。

1. 

在程序运行过程中,其值不能被改变的量称为常量。如例3.1程序中的5,9,32和例3.2程序中的1000,0.0036,0.0225,0.0198是常量。数值常量就是数学中的常数。

常用的常量有以下几类:

(1)整型常量。如1000,12345,0,-345等都是整型常量。
(2)实型常量。有两种表示形式:
①十进制小数形式,由数字和小数点组成。如123.456,0.345,-56.79,0.0,12.0等。
②指数形式,如12.34e3(代表12.34×10³),-346.87e-25(代表—346.87×10-25),
0.145E-25(代表0.145×10-25)等。由于在计算机输入或输出时无法表示上角或下角,故
规定以字母e或E代表以10为底的指数。但应注意:e或E之前必须有数字,且e或E后
面必须为整数。如不能写成e4,12e2.5。
(3)字符常量。有两种形式的字符常量:
①普通字符,用单撇号括起来的一个字符,如:'a','Z','3','?','#'。不能写成'ab'或
'12'。请注意:单撇号只是界限符,字符常量只能是一个字符,不包括单撇号。'a'和'A'是不
同的字符常量。字符常量存储在计算机存储单元中时,并不是存储字符(如a,z,#等)本
身,而是以其代码(一般采用ASCII代码)存储的,例如字符'a'的ASCII代码是97,因此,在
存储单元中存放的是97(以二进制形式存放)。ASCI字符与代码对照表见附录A①。

我的理解:

这段文本主要介绍了计算机高级语言中数据的两种基本表现形式:常量和变量。

1. **常量**:
   - 常量是在程序运行过程中其值不能被改变的量。例如,数字如5, 9, 32或1000, 0.0036等都是常量。实际上,数值常量在数学中就是常数。
   - 常用的常量可以分为以下几种:
     - **整型常量**:这些是整数,例如1000、-345等。
     - **实型常量**:表示浮点数值,有两种表示方法:
       - 十进制小数形式,例如:123.456或-56.79等。
       - 指数形式,例如12.34e3表示\(12.34 \times 10^3\)。注意,使用e或E表示10的指数,其前面必须有数字,且e或E后面的数必须是整数。
     - **字符常量**:包括:
       - 普通字符:它是由一个字符组成的,并用单引号包围,例如:'a'、'Z'、'3'等。字符常量在计算机中存储并不是以字符本身形式,而是以其ASCII码的形式存储。例如,'a'的ASCII代码是97,因此存储时存放的是97的二进制形式。

这段文本重点突出了常量的定义、种类和在计算机中的表示。没有提到变量的具体内容,可能是在这段之后或其他部分进行了详细描述。总的来说,这是对计算机编程中常量的基本介绍。

解释:

①C语言并没有指定使用哪一种字符集,由各编译系统自行决定采用哪一种字符集。C语言只是规定:基本字符
集中的每个字符必须用一个字节表示;空字符也占一个字节,它的所有二进位都是0;对数字0~9字符的代码,后面一个
数字的代码应比前一个数字的代码大1(如在ASCⅡI字符集中,数字'2'的代码是50,数字'3'的代码是51,后者比前者的
代码大1,符合要求)。中小型计算机系统大都采用ASCII字符集,ASCII是American Standard Code for Information
Interchange(美国标准信息交换代码)的缩写。

我的理解:

这段话主要描述了C语言对字符集和字符表示的一些基本规定和常见实践。具体来说

1. **字符集选择**:C语言本身并不指定要使用的具体字符集。换句话说,不同的编译器或平台可能会选择不同的字符集来实现C语言。

2. **基本字符集规定**:
   - C语言规定基本字符集中的每个字符必须由一个字节来表示。这意味着无论选择何种字符集,每个字符都需要占据一个字节的存储空间。
   - 空字符(通常用'\0'表示)也占一个字节,并且这个字节的所有二进制位都是0。
   - 对于数字字符0到9,C语言规定每个数字的字符代码比其前一个数字的代码大1。这确保数字字符在字符集中是连续的。例如,在ASCII字符集中,'2'的代码是50,而'3'的代码是51,满足这个规定。

3. **ASCII字符集**:尽管C语言没有指定使用哪种字符集,但许多中小型计算机系统选择使用ASCII字符集。ASCII代表“美国标准信息交换代码”(American Standard Code for Information Interchange)。

总的来说,这段文本强调了C语言对字符表示的一些核心规定,以及ASCII字符集在中小型计算机系统中的普遍应用。

 我的理解:

这段文字描述了C语言中转义字符的概念以及常用的转义字符。

1. **转义字符**:在C语言中,某些字符由于在代码中有特殊含义或无法直接表示,所以需要使用一种特殊形式来表示,这种特殊形式就是转义字符。转义字符通常由反斜线“\”开始,后面跟一个或多个字符组成。

2. 举例解释:
   - `'\n'` 代表换行符,用于在输出中换到下一行。
   - `'\t'` 代表水平制表符,可以将输出位置跳到下一个制表位置。

3. **特殊字符的表示**:除了常用的转义字符,还有一些字符可以用特殊的方式来表示:
   - 使用八进制表示:例如,`'\101'` 对应于ASCII字符'A',因为八进制数101相当于十进制数65,而ASCII码65对应的字符是大写字母'A'。
   - 使用十六进制表示:例如,`'\x41'` 也代表ASCII字符'A',因为十六进制数41等于十进制数65。
   
4. **字符串常量**:字符串常量是由双引号括起来的一组字符。例如,“boy”和“123”。与单引号括起的字符常量不同,字符串常量可以包含多个字符。重要的是,字符串常量在内存中以空字符`'\0'`结束,这样可以标记字符串的末尾。

此段文本提供了一个详细的介绍和参考,以帮助理解C语言中转义字符的使用和相关概念。如果你对编程和C语言有基础,这部分内容是很重要的,因为转义字符在编程中经常使用,尤其是当处理字符串和字符时。

 

 我的理解:

这段文字涉及C语言中常量、符号常量、变量以及常变量的概念。以下是对每部分的解释和总结:

1. **字面常量**:这些是在代码中直接识别的常量。例如,数字5、字符串"hello"都是字面常量。字面常量是固定的值,它们在代码中是不能改变的。

2. **符号常量**:
   - 通过`#define`指令,我们可以将一个常量值与一个符号名称关联起来。
   - 例如:`#define PI 3.1416`,此后在代码中使用`PI`就相当于使用数字3.1416。
   - 使用符号常量的好处包括:代码更加易读(因为符号常量的名称可以是有意义的);如果需要更改符号常量的值,只需在一处进行修改。
   - 符号常量不占用实际内存,因为在预编译时,它们就被替换为实际的字面常量值。

3. **变量**:
   - 变量是用于存储数据的命名存储单元。
   - 它的值可以在程序运行时改变。
   - 变量在使用前必须被定义,指定其类型和名称。
   - 变量名是一个与存储单元关联的名称。这个存储单元存放变量的实际值。

4. **常变量**:
   - 在C99标准中,引入了一个新的概念叫做常变量。这是一个只读的变量,它的值在定义后不能更改。
   - 常变量在定义时会加上`const`关键字。

总的来说,这段文字解释了C语言中常量和变量的基本概念,以及如何使用它们。这些概念在编写C程序时是非常基础和重要的。Understanding these concepts is crucial for anyone looking to write or understand C programs.

这段话的内容主要是关于C语言中变量定义的位置。

以下是对这段话的解释:

① **定义变量的位置**:在C语言中,你可以在以下几个地方定义变量:

- **函数开头的声明部分**:传统的C语言规范要求在函数的开始部分定义所有的局部变量。这是因为在早期的C语言版本中,变量必须在函数体的任何语句之前被声明。

- **函数外部**:这是指全局变量或外部变量的定义。这些变量在整个程序中都是可见的,并不局限于一个特定的函数。关于这部分内容,将在文中提到的第7章进行详细说明。

- **函数内的复合语句中**:C99标准引入了一个新特性,允许在函数体内的复合语句中定义变量。复合语句就是用花括号`{ }`括起来的语句块。这意味着在C99及其后续版本中,你可以在代码的任何位置,只要它位于花括号内,定义局部变量。这为变量的定义提供了更大的灵活性。

简而言之,这段话描述了在C语言中定义变量的不同位置,并提到了C99标准中允许的新的定义位置。

 

 我的理解:

这段文本主要涵盖了以下几个方面的内容:

1. **常变量(`const`变量)**:
    - `const int a=3;` 定义了一个整型的常变量`a`并初始化它为3。这意味着`a`的值在其整个生命周期内都不能被修改。
    - 常变量与普通常量的区别:常变量具有变量的所有基本属性,如有类型和占用存储单元,但其值不可以被更改。简单地说,常变量是有名字的不变量,而常量是没有名字的不变量。

2. **符号常量与常变量的对比**:
    - 符号常量(例如`#define Pi 3.1415926`)是预处理指令,它在预编译时进行字符替换,使得在之后的编译过程中符号常量的名字已经不存在了,它不占用任何存储空间。
    - 常变量(例如`const float pi=3.1415926;`)确实占用存储空间,并有一个实际的值,只是这个值不可以被修改。
    - 常变量具有符号常量的优点并且使用上更为方便。但需要注意的是,并非所有编译系统都支持C99的功能,因此在某些编译系统中可能无法使用常变量。

3. **标识符**:
    - 标识符是用于在计算机高级语言中命名对象(如变量、符号常量、函数等)的字符序列。
    - 标识符应只由字母、数字和下划线组成,并且它的第一个字符必须是字母或下划线。
    - 给出了合法的标识符例子,如`sum`, `Class`, `lotus_1_2_3`等,以及非法的标识符例子,如`M.D.John`, `¥123`等。
    - 在C语言中,标识符是大小写敏感的,因此`sum`和`SUM`是两个不同的标识符。

总之,这段文本详细解释了C语言中的常变量、符号常量和标识符的定义、用法和特点。

 3.2.2 数据类型

 

 我的理解:

这段文本主要解释了以下几个方面:

1. **为什么需要数据类型**:  
   - 在数学中,数值的运算是抽象和准确的,但在计算机中,数据存储是具体的,受到存储单元大小的限制。这意味着某些数值(如循环小数)不能在计算机中完美地表示。
   - 计算机中的计算是实际的,采用工程方法,往往只能得到近似结果。
   - 数据类型决定了数据在内存中的存储方式和大小。

2. **数据类型的分类**:  
   图 3.4 列出了 C 语言中的各种数据类型,包括:
   - **基本类型**:包括整型(如`int`、`short int`、`long int`、`long long int`)和浮点型(如`float`、`double`以及复数浮点型`float_complex`等)。
   - **其他类型**:如字符型 (`char`)、布尔型 (`bool`) 和枚举型 (`enum`)。
   - **派生类型**:如指针类型 (`*`)、数组类型 (`[]`)、结构体类型 (`struct`)、共用体类型 (`union`) 以及函数类型。

   其中,整型、浮点型和枚举型都是算术类型,因为它们的值都是数值。算术类型和指针类型统称为纯量类型,因为它们的值都是以数字表示的。而数组类型和结构体类型被称为组合类型。

3. **存储需求**:  
   不同类型的数据在内存中占用的存储单元长度是不同的。例如,在 Visual C++ 中,`char` 类型数据占用 1 个字节,而 `int` 类型数据占用 4 个字节。

4. **未来章节的内容**:  
   该文本也预览了后续章节的内容,包括基本数据类型的应用、数组、函数、指针以及结构体类型、共用体类型和枚举类型的介绍。

总的来说,这段文本为读者提供了一个关于 C 语言中数据类型的概览,解释了为什么需要数据类型以及这些数据类型的基本特点和用途。

3.2.3 整型数据

 

我的理解:

这段文本详细介绍了 C 语言中整型数据的分类及其特性。以下是内容摘要:

### 整型数据分类

1. **基本整型 (int 型)**

    - 分配的存储空间可能是 2 个字节或 4 个字节,具体取决于 C 编译系统。例如,Turbo C 2.0 为每个整型数据分配 2 个字节 (16 位),而 Visual C++ 则分配 4 个字节 (32 位)。
    - 数据在存储单元中采用补码 (complement) 形式存放。
        - 正数的补码与其二进制形式相同。
        - 负数的补码是其绝对值的二进制形式取反后加 1。
    - 存储单元的最左边一位表示符号,0 代表正数,1 代表负数。
    - 如果 int 占 2 个字节,则值范围为 -32768 到 32767;若占 4 个字节,则范围为 -2147483648 到 2147483647。

2. **短整型 (short int)**

    - 也可以称为 short。
    - 在 Visual C++ 中,int 占用 4 个字节,而 short 占用 2 个字节。
    - 存储方式与 int 型相同。
    - 短整型变量的值范围为 -32768 到 32767。

3. **长整型 (long int)**

    - 也可以称为 long。
    - 在 Visual C++ 中,long 占用 4 个字节 (32 位)。
    - long int 型变量的值范围为 -2147483648 到 2147483647。

### 附加点

- 补码知识在这部分内容中不做深入讲解,如需进一步了解可以参考与计算机原理相关的书籍。
- 整数值范围的极限是由其所占用的存储空间决定的,超过这些极限会导致数值溢出。

这部分内容对 C 语言中的整型数据类型进行了详细分类和描述,为读者提供了整型数据在不同编译系统中的存储和表达方式。

我的理解:

您已经提供了一部分详细的内容关于整型变量的分类和它们的符号属性,我会根据您提供的信息继续概述和整理:

整型数据分类 (续)

4. 双长整型 (long long int)

    - 类型名为 long long int 或 long long。
    - 一般分配 8 个字节。
    - C99 标准新增,但许多早期的 C 编译系统并未实现。
  
附加信息

- C 语言标准并未具体规定各种数据类型所占的存储单元长度,而是由各编译系统自行决定。
- C 语言标准提出了以下的要求:`sizeof(short) ≤ sizeof(int) ≤ sizeof(long) ≤ sizeof(long long)`
  
符号属性

- 整型变量的值在存储单元中都是以补码形式存储。
- 存储单元中的第一个二进制位代表符号。

表 3.2:整型数据常见的存储空间和值的范围 (基于 Visual C++)

| 类型 | 字节数 | 取值范围 |
| --- | --- | --- |
| int | 4 | -2³¹ ~ 2³¹-1 |
| unsigned int | 4 | 0 ~ 2³²-1 |
| short | 2 | -2¹⁵ ~ 2¹⁵-1 |
| unsigned short | 2 | 0 ~ 2¹⁶-1 |
| long | 4 | -2³¹ ~ 2³¹-1 |
| unsigned long | 4 | 0 ~ 2³²-1 |
| long long | 8 | -2⁶³ ~ 2⁶³-1 |
| unsigned long long | 8 | 0 ~ 2⁶⁴-1 |

无符号与有符号整型

- 有些应用场景中的数据只能是正值,如学号、年龄等。为了充分利用变量的值范围,可以使用无符号 (unsigned) 类型。
- 可以在类型前加上 "unsigned" 修饰符来指定为无符号整数类型。
- 如果加上 "signed" 修饰符,则为有符号类型。

基于这些描述,C 语言中的整型数据可以扩展为以下 8 种:

1. int
2. unsigned int
3. short
4. unsigned short
5. long
6. unsigned long
7. long long
8. unsigned long long

这部分内容进一步深化了对 C 语言整型数据类型的了解,包括它们的存储、符号属性以及如何在实际应用中选择适当的类型。

我的理解:

这段内容主要介绍了C语言中整型数据类型的基础知识。下面是对这段内容的简化和解释:

1. **整型数据的声明**:
   - 有符号基本整型:可以声明为`signed int`或简写为`int`
   - 无符号基本整型:声明为`unsigned int`
   - 有符号短整型:可以声明为`signed short`, `short`, 或者`signed short int`
   - 无符号短整型:声明为`unsigned short` 或 `unsigned short int`
   - 有符号长整型:可以声明为`signed long`, `long`, 或者`signed long int`
   - 无符号长整型:声明为`unsigned long`或`unsigned long int`
   - 有符号双长整型:可以声明为`signed long long` 或 `signed long long int`,这是C99标准新增的
   - 无符号双长整型:声明为`unsigned long long` 或 `unsigned long long int`
   
2. **符号位**:
   - 如果变量是有符号类型,那么其存储单元的最高位会被用来标识数值的正负(0表示正,1表示负)。这意味着变量可以存放正数和负数。
   - 如果变量是无符号类型,那么所有的二进制位都被用来表示数值本身,无法存放负数。因此,无符号整型的正数范围是有符号整型的两倍。
   
3. **实例**:
   - 如果有一个有符号的短整型变量`a`,其值范围是-32768到32767。
   - 如果有一个无符号的短整型变量`b`,其值范围是0到65535。
   
4. **注意事项**:
   - 只有整型(包括字符型)可以使用`signed`或`unsigned`修饰符。浮点类型不能使用这些修饰符。
   - 对于无符号整型数据,应使用`%u`格式输出。
   - 当定义一个无符号整型变量时,不应给它赋负值。否则,这会导致意外的结果。例如,将-1赋值给一个`unsigned short`类型的变量,实际存储的值会是65535。

总之,当你在编程时,根据需要选择正确的数据类型是非常重要的,特别是考虑到数值范围和是否需要存储负值。

这段话解释了为什么将一个负整数 `-1` 赋值给一个 `unsigned short` 变量时,该变量的值会被存储为 `65535`。

要理解这一点,首先需要对二进制和计算机如何存储负数有所了解。

1. **二进制的基础**:
   计算机内部使用二进制来存储数据。`unsigned short` 是16位的,所以它的范围是 `0` 到 `2^16 - 1`,即 `0` 到 `65535`。

2. **负数的存储**:
   计算机通常使用一种方法,称为“二进制补码”,来存储负数。对于16位整数,数字 `-1` 的二进制补码表示是 `1111111111111111`。

3. **赋值的过程**:
   当你尝试将 `-1` 赋值给 `unsigned short` 变量时,`-1` 的补码表示(即 `1111111111111111`)被直接赋给那个变量。但由于这个变量是无符号的,它会直接解释这个二进制数为一个正数,而不是补码形式的负数。因此,这个二进制数被解释为十进制的 `65535`。

4. **输出的问题**:
   当你尝试使用 `%d` 格式化字符串来输出这个变量时,它会尝试将其解释为有符号整数。但由于变量实际上是无符号的,所以输出的结果是 `65535`。

总之,这一现象的背后原因是计算机如何使用二进制补码来表示和存储负数。这也强调了在编程时选择正确的数据类型和格式化字符串的重要性。如果不这样做,可能会出现意想不到的结果。

3.2.4字符型数据

由于字符是按其代码(整数)形式存储的,因此C99把字符型数据作为整数类型的一种。但是,字符型数据在使用上有自己的特点,因此把它单独列为一节来介绍。

1.字符与字符代码

字符与字符代码并不是任意写一个字符,程序都能识别的。例如代表圆周率的π在程序中是不能识别的,只能使用系统的字符集中的字符,目前大多数系统采用ASCⅡ字符集。各种字符集(包括ASCII字符集)的基本集都包括了127个字符。其中包括:

·字母:大写英文字母A~Z,小写英文字母a~z。

·数字:0~9。

·专门符号:29个,包括

!"#&'()*+,-./:;<=>?[\]^_`{|}~

·空格符:空格、水平制表符(tab)、垂直制表符、换行、换页(form feed)。

·不能显示的字符:空(null)字符(以'\0'表示)、警告(以'\a'表示)、退格(以'\b'表示)、回车(以'\r'表示)等。

详见附录A(ASCII字符表)。这些字符用来写英文文章、材料或编程序基本够用了。前已说明,字符是以整数形式(字符的ASCII代码)存放在内存单元中的。例如:

大写字母'A'的ASCII代码是十进制数65,二进制形式为1000001。小写字母'a'的ASCII代码是十进制数97,二进制形式为1100001。数字字符'1'的ASCII代码是十进制数49,二进制形式为0110001。空格字符''的ASCII代码是十进制数32,二进制形式为0100000。专用字符'%'的ASCII代码是十进制数37,二进制形式为0100101。转义字符'\n'的ASCII代码是十进制数10,二进制形式为0001010。

可以看到,以上字符的ASCII代码最多用7个二进位就可以表示。所有127个字符都

我的理解:

- **3.2.4字符型数据**表示本节内容涉及到字符型数据。

- **由于字符是按其代码(整数)形式存储的**:在计算机中,所有数据,无论是数字、字符、图片等,都以二进制的形式存储。字符也不例外,每个字符对应一个唯一的整数代码。

- **C99把字符型数据作为整数类型的一种**:C99标准认为,因为字符的底层存储实际上是整数,所以它把字符型数据看作整数数据的一种。

- **字符与字符代码并不是任意的**:并非所有的字符都可以在计算机中直接表示。例如,某些特殊符号,如π,可能没有与之对应的ASCII代码。

- **大多数系统采用ASCⅡ字符集**:ASCII字符集是早期计算机系统中广泛采用的一种字符编码方式,它为每个字符分配了一个唯一的整数代码。例如,大写字母'A'的ASCII代码是65。

- **各种字符集(包括ASCII字符集)的基本集都包括了127个字符**:这表示ASCII字符集包含了127个不同的字符编码。

- **这些字符用来写英文文章、材料或编程序基本够用了**:127个字符包括了英文字母、数字和常用符号,这些对于编写英文内容和程序是足够的。

- **字符是以整数形式(字符的ASCII代码)存放在内存单元中的**:再次强调,每个字符在内存中的存储实际上是它对应的ASCII代码,这个代码是一个整数值。

- **以上字符的ASCII代码最多用7个二进位就可以表示**:虽然每个ASCII代码可以用7位二进制表示,但通常都会使用8位,也就是一个字节来存储。

总的来说,这段话介绍了字符如何在计算机中存储(通过其对应的整数值或ASCII代码),以及ASCII字符集如何为这些字符提供唯一的整数编码。

 我的理解:
 

这段文字是关于C语言中字符型数据的基本知识。让我们分步骤来解析这段话:

1. **可以用7个二进位表示...字节中的第1位置为0**:  
    ASCII字符集中最大的数值为127,二进制表示是1111111,这仅使用了7位。但在计算机中,为了统一,通常使用8位(即一个字节)来存储字符。因此,最高位(第8位)通常置为0。

2. **如小写字母'a'在内存中的存储情况...**:  
    字符'a'的ASCII码为97,二进制表示是01100001,这里面,前面的0是最高位。

3. **注意:字符'1'和整数1是不同的概念**:  
    这部分解释了字符和整数之间的差异。字符'1'是ASCII字符集中的一个字符,代表数字1的形状,其ASCII码为49。而整数1是实际的数值,按整数的存储方式保存。字符'1'的存储只需要1个字节,而整数1可能需要2或4个字节(取决于系统和编译器)。

4. **整数运算1+1等于整数2...**:  
    这里解释了字符和整数之间的运算差异。字符'1'加字符'1'的结果不等于整数2,也不是字符'2'。

5. **字符变量**:  
    这部分解释了如何在C语言中定义和使用字符变量。字符变量用char关键字定义。虽然它在底层是一个整数,但由于它常用来存放字符,因此被称为字符变量。

6. **在输出字符变量的值时...**:  
    说明了如何使用printf函数输出字符变量的数值表示和字符表示。

7. **字符型数据的存储空间和值的范围**:  
    这部分列出了字符型数据的存储需求和可能的值范围。有符号字符型(signed char)可以表示-128到127的整数,而无符号字符型(unsigned char)可以表示0到255的整数。

总结:这段文字向我们解释了在C语言中如何表示、存储和使用字符型数据,以及字符和整数之间的主要区别。这是编程基础中的一个重要概念,因为字符和整数虽然看起来相似,但在计算机内部的表示和处理方式是完全不同的。

3.2.5 浮点型数据

 

我的理解:

1. **字符型数据**:
   - 有符号字符型变量允许的值范围是-128~127。但字符的代码不可能为负值,所以实际上使用的范围是0~127。
   - 系统有时提供127个基本字符用7个二进制位来存储,这时,字符型变量的第一个二进制位设置为0,后面7位用来存放字符的代码。
   - 在某些情况下,127个字符可能不满足需求,因此有的系统提供了扩展的字符集,使得可用的字符从127个增加到255个。这是通过将字符型变量改为unsigned char实现的,即使用所有的8位来存放字符代码,因此可以存放2^8-1即255个字符代码。
   - 附录A的ASCII代码的128~255部分是某些系统中的扩展字符,但并不适用于所有系统。在中文操作系统中,ASCII代码127之后的部分被当作中文字符处理。

2. **浮点型数据**:
   - 浮点数用于表示带小数点的实数。在C语言中,实数是以指数形式存储的。例如,3.14159可以以多种指数形式表示,而实际值不变。
   - 浮点数的称谓来源于其小数点位置可以“浮动”。只要小数点位置浮动的同时改变指数值,其表示的值就保持不变。
   - 浮点数类型有:float (单精度浮点型),double (双精度浮点型) 和 long double (长双精度浮点型)。
   - float型变量分配4个字节。在存储时,数据被分为小数部分和指数部分两个部分。小数点前面的数为0。
   - float型数据有限制的精确度,数的有效数字和表示范围与小数部分和指数部分的位数有关。例如,float型数据可以达到6位有效数字,其数值范围为-3.4×10^-38到3.4×10^38。
   - double型用于扩展表示范围,为其分配8个字节。

总之,这段文本提供了C语言中字符型和浮点型数据的基本知识和原理,讲述了他们的存储、表示和特点。

我的理解:

这段话主要介绍了C语言中关于浮点数类型的存储和使用。

1. **double型数据**:
   - 可以得到15位有效数字。
   - 数值范围为 \(-1.7×10^{-308}\) ~ \(1.7×10^{38}\)。
   - 在C语言中进行浮点数运算时,`float`型数据会自动转换为`double`型来提高运算精度。

2. **long double型**(长双精度):
   - 不同的编译系统对这个数据类型的处理是不同的。
   - Turbo C为`long double`分配16个字节。
   - Visual C++将`long double`与`double`相同,分配8个字节。

3. **实型数据的有关情况(在Visual C++环境下)**:
   - `float`:占4字节,有6位有效数字,数值范围是0和\(1.2×10^{-38}\) ~ \(3.4×10^{38}\)。
   - `double`:占8字节,有15位有效数字,数值范围是0和\(2.3×10^{-308}\) ~ \(1.7×10^{208}\)。
   - `long double`:占8字节,有15位有效数字,数值范围是0和\(2.3×10^{-308}\) ~ \(1.7×10^{308}\)。

4. **怎样确定常量的类型**:
   - 常量也有类型。在程序中的常量需要在计算机的存储单元中存储,所以必须确定其类型。
   - 字符常量很简单,由单撇号括起来的单个字符或转义字符被识别为字符常量。
   - 整型常量:不带小数点的数值。在不同的编译环境中,整型的存储长度和范围会有所不同。例如,Turbo C对整型数据分配2个字节,范围为-32768~32767;而Visual C++则对int型分配4个字节,范围为-2147483648~2147483647。

这部分的内容主要针对C语言中的数据类型及其在不同编译系统中的处理方式进行描述和解释。

3.2.6 怎样确定常量的类型

这段文字的核心内容是解释C语言中整数和浮点数常量的表示及其存储。以下是主要内容的摘要和概括:

1. **长整型常量**:
    - 在一个整数的末尾加大写的“L”或小写的“l”可以标识这是一个长整型(`long int`)常量。如:`123L` 或 `234l`。
    - 在Visual C++中,由于`int`和`long int`都占用4个字节,所以通常不必特意使用`long int`。

2. **浮点型常量**:
    - 所有以小数形式或指数形式表示的实数均为浮点型常量。
    - 例如,`10`是整型常量,而`10.0`是浮点型常量。
    - C编译系统默认将浮点型常量视为双精度(`double`)并为其分配8个字节。

3. **警告和精度**:
    - 当尝试将双精度常量赋值给单精度(`float`)变量时,编译器可能会发出警告。这是因为这种转换可能导致精度损失。
    - 例如,`float a = 3.14159;` 会产生警告,因为`3.14159`是双精度而`a`是单精度。

4. **指定常量类型**:
    - 通过在浮点数常量后加上`F`或`f`,可以指定该常量为单精度。如:`3.14159f`。
    - 使用大写或小写的“L”指定常量为长双精度(`long double`)。例如:`1.23L`。

5. **类型与变量的区别**:
    - 变量是存储数据的具体实体,而类型则是一组共性或属性的抽象描述。
    - 变量有存储空间,可以被赋值。而类型是变量的一个属性,描述了变量的种类和特性,不具有存储空间。
    - 例如,具体的大学生(如张方章、李四元)可以有具体的成绩,而“大学生”这个分类不能被赋予一个特定的成绩。

简而言之,这段话详细讲解了C语言中不同数据类型的表示方式、存储情况和相关注意事项,同时也强调了类型和变量之间的区别。

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

lnmp架构-mysql

1.MySQL数据库编译 make完之后是这样的 mysql 初始化 所有这种默认不在系统环境中的路径里 就这样加 这样就可以直接调用 不用输入路径调用 2.初始化 重置密码 3.mysql主从复制 配置master 配置slave 当master 端中还没有插入数据时 在server2 上配slave 此时master 还没进…

在云原生环境中构建可扩展的大数据平台:方法和策略

文章目录 1. **选择适当的云提供商&#xff1a;**2. **采用容器化和微服务架构&#xff1a;**3. **分层架构设计&#xff1a;**4. **弹性计算资源&#xff1a;**5. **使用分布式计算框架&#xff1a;**6. **数据分区和分片&#xff1a;**7. **使用列式存储&#xff1a;**8. **缓…

002微信小程序云开发API数据库-迁移状态查询/更新索引

文章目录 微信小程序云开发API数据库-迁移状态查询案例代码微信小程序云开发API数据库-更新索引案例代码 微信小程序云开发API数据库-迁移状态查询 在微信小程序中&#xff0c;云开发API数据库是一种方便快捷的数据库解决方案。但是&#xff0c;有时候我们可能需要将云开发数据…

C++笔记之rolling counter(滚动计数器)

C笔记之rolling counter&#xff08;滚动计数器&#xff09; 一个 rolling counter&#xff08;滚动计数器&#xff09;是一个计数器&#xff0c;可以在给定的范围内不断增加&#xff0c;当达到最大值时会从最小值重新开始。 code review! 文章目录 C笔记之rolling counter&…

Python|爬虫和测试|selenium框架模拟登录示例(一)

前言&#xff1a; 上一篇文章Python|爬虫和测试|selenium框架的安装和初步使用&#xff08;一&#xff09;_晚风_END的博客-CSDN博客 大概介绍了一下selenium的安装和初步使用&#xff0c;主要是打开某个网站的主页&#xff0c;基本是最基础的东西&#xff0c;那么&#xff0c;…

redis在linux和windows上的安装配置(解决问题:没有可用软件包 redis)

linux系统 安装 yum install redis安装 在终端输入yum install redis安装。 报错&#xff1a;没有可用软件包 redis。 解决&#xff1a; 运行以下命令更新软件包信息&#xff1a; sudo yum clean all sudo yum update 然后继续尝试yum install redis。 如果还不成功&a…

Redis—Redis介绍(是什么/为什么快/为什么做MySQL缓存等)

一、Redis是什么 Redis 是一种基于内存的数据库&#xff0c;对数据的读写操作都是在内存中完成&#xff0c;因此读写速度非常快&#xff0c;常用于缓存&#xff0c;消息队列、分布式锁等场景。 Redis 提供了多种数据类型来支持不同的业务场景&#xff0c;比如 String(字符串)、…

快速排序笔记

一、quick_sort方法中如果 il,jr 会死循环的分析 1、示例代码 void quick_sort(int a[],int l,int r){if(l>r) return;int il,jr; //此处设置会导致死循环int x num[(lr)>>1];while(i<j){while(a[i] <x); //死循环的地方while(a[--j] >x);if(i<j) swap(a…

Day44|leetcode 518.零钱兑换II、377. 组合总和 Ⅳ

完全背包理论基础 视频链接&#xff1a;带你学透完全背包问题&#xff01; 和 01背包有什么差别&#xff1f;遍历顺序上有什么讲究&#xff1f;_哔哩哔哩_bilibili 完全背包与01背包不同的地方就是&#xff1a;01背包每种物品只能取一次&#xff0c;而完全背包每种物品可以取…

CSS中如何隐藏元素但保留其占位空间(display:none vs visibility:hidden)?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ display: none;⭐ visibility: hidden;⭐ 如何选择⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&#xff01;这个专栏是为…

可解释性的相关介绍

一、可解释性的元定义&#xff08;Meta-definitions of Interpretability&#xff09; The extent to which an individual can comprehend the cause of a model’s outcome. [1]The degree to which a human can consistently predict a model’s outcome. [2] 可解释性&am…

深入理解Reactor模型的原理与应用

1、什么是Reactor模型 Reactor意思是“反应堆”&#xff0c;是一种事件驱动机制。 和普通函数调用的不同之处在于&#xff1a;应用程序不是主动的调用某个 API 完成处理&#xff0c;而是恰恰相反&#xff0c;Reactor逆置了事件处理流程&#xff0c;应用程序需要提供相应的接口并…

【力扣每日一题】2023.8.26 汇总区间

目录 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代码&#xff1a; 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 题目给我们一个有序数组&#xff0c;让我们把数组内的元素汇总区间&#xff0c;也就是说有一串数字是连续的&#xff0c;比如是 1 2 3 4…

leetcode359周赛

2828. 判别首字母缩略词 核心思想:枚举。只需要枚举首字母和s是否一一对应即可。 2829. k-avoiding 数组的最小总和 核心思想&#xff1a;自己的方法就是哈希表&#xff0c;枚举i的时候&#xff0c;将k-i统计起来&#xff0c;如果出现了那么就跳过。灵神的方法是数学法&#…

PCB设计常见问题

Fill Mode中存在3个选项 Solid&#xff08;Copper Regions&#xff09; Hatched&#xff08;Tracks/arcs&#xff09; None&#xff08;outlines&#xff09; 区别Solid&#xff08;Copper Regions&#xff09;过大电流的能力更强&#xff0c;且对于电路板存在的分布电容的干扰…

山西电力市场日前价格预测【2023-08-28】

日前价格预测 预测明日&#xff08;2023-08-28&#xff09;山西电力市场全天平均日前电价为319.70元/MWh。其中&#xff0c;最高日前电价为371.80元/MWh&#xff0c;预计出现在19: 15。最低日前电价为278.59元/MWh&#xff0c;预计出现在13: 00。 价差方向预测 1&#xff1a; …

Android 基础知识

一、Activity 1、onSaveInstanceState(),onRestoreInstanceState的调用时机 onSaveInstanceState 调用时机 从最近应用中选择运行其他程序时 但用户按下Home键时 屏幕方向切换时 按下电源案件时 从当前activity启动一个新的activity时 onRestorInstanceState调用时机 只…

HCIP-HCS华为私有云

1、概述 HCS&#xff08;HuaweiCoudStack&#xff09;华为私有云&#xff1a;6.3 之前叫FusionSphere OpenStack&#xff0c;6.3.1 版本开始叫FusionCloud&#xff0c;6.5.1 版本开始叫HuaweiCloud Stack (HCS)华为私有云软件。 开源openstack&#xff0c;发放云主机的流程&am…

如何从“监控”到“可观测性”?

什么是可观测性&#xff1f; 可观测性&#xff08;Observability&#xff09;是一种通过系统产生的输出数据&#xff08;如日志、指标和链路追踪&#xff09;来衡量当前系统运行状态的能力&#xff0c;其源于现代应用系统的复杂性和分布式架构&#xff0c;这些应用系统往往由大…

Unity编辑器扩展:提高效率与创造力的关键

Unity编辑器扩展&#xff1a;提高效率与创造力的关键 前言 一、理解Unity编辑器二、扩展Unity编辑器的意义三、扩展Unity编辑器的必要性四、Unity编辑器的扩展方式五、扩展Unity编辑器的步骤六、Unity编辑器扩展的应用案例七、总结 前言 Unity是一款广泛使用的游戏开发引擎&am…
最新文章