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

news2024/11/25 0:34:44

 

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.coloradmin.cn/o/937500.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

三、前端监控之Sentry的介绍

Sentry介绍 Sentry是一个开源的实时事件日志记录和聚合平台。它专门用于监视错误和提取执行适当的事后操作所需的所有信息, 而无需使用标准用户反馈循环的任何麻烦。支持 web 前后端、移动应用以及游戏&#xff0c;支持 Python、OC、Java、Go、Node、Django、RoR 等主流编程语…

【Docker】网络

文章目录 Docker 网络基础Docker网络管理Docker网络架构CNMLibnetwork驱动 常见的网络类型 Docker 网络管理命令docker network createdocker network inspectdocker network connectdocker network disconnectdocker network prunedocker network rmdocker network ls docker …

跳跃游戏 II【贪心算法】

跳跃游戏 II class Solution {public int jump(int[] nums) {int cur 0;//当前最大覆盖路径int next 0;//下一步的最大覆盖路径int res 0;//存放结果&#xff0c;到达终点时最少的跳跃步数for (int i 0; i < nums.length; i) {//遍历数组&#xff0c;以给出数组以一个…

老韦上新

知道韦东山老师的人很多&#xff0c;当然肯定可能也是有人不知道的&#xff0c;比如我今天吃饭的时候&#xff0c;我跟 JP 同学说&#xff0c;你认识韦东山老师吗&#xff1f;JP 同学说&#xff0c;「我不认识&#xff0c;他是不是搞 ODM 的&#xff1f;你知道的&#xff0c;我…

【python】输出高亮信息的内容

背景 日志是定位问题和数据分析的关键手段之一&#xff0c;尤其是在调试阶段&#xff0c;高效的、具有辨识度的日志可以非常快速准确的进行问题定位。shell中的echo命令自带文本格式化输出的功能&#xff0c;我们先来回顾下基本的语法&#xff0c;然后套用到python中即可。 s…

【kubernetes】使用kubepshere部署中间件服务

KubeSphere部署中间件服务 入门使用KubeSphere部署单机版MySQL、Redis、RabbitMQ 记录一下搭建过程 (内容学习于尚硅谷云原生课程) 环境准备 VMware虚拟机k8s集群&#xff0c;一主两从&#xff0c;master也作为工作节点&#xff1b;KubeSphere k8skubesphere devops比较占用磁…

手写数字识别之优化算法:观察Loss下降的情况判断合理的学习率

目录 手写数字识别之优化算法:观察Loss下降的情况判断合理的学习率 前提条件 设置学习率 学习率的主流优化算法 手写数字识别之优化算法:观察Loss下降的情况判断合理的学习率 我们明确了分类任务的损失函数&#xff08;优化目标&#xff09;的相关概念和实现方法&#xff…

Torrent Scanner插件导致网站重复登录

Torrent Scanner插件导致网站重复登录 网站登录成功后随便点击任意按钮&#xff0c;又重复跳回登录页面&#xff0c;可能原因是cookie的问题&#xff0c;不过博主遇到的是Torrent Scanner插件导致重复登录&#xff0c;解决方法&#xff1a;直接卸载或停止Torrent Scanner插件。…

C++贪吃蛇(控制台版)

C自学精简实践教程 目录(必读) 目录 主要考察 需求 输入文件 运行效果 实现思路 枚举类型 enum class 启动代码 输入文件data.txt 的内容 参考答案 学生实现的效果 主要考察 模块划分 文本文件读取 UI与业务分离 控制台交互 数据抽象 需求 用户输入字母表示方…

【leetcode 力扣刷题】双指针///原地扩充线性表

双指针///原地扩充线性表 剑指 Offer 05. 替换空格定义一个新字符串扩充字符串&#xff0c;原地替换思考 剑指 Offer 05. 替换空格 题目链接&#xff1a;剑指 Offer 05. 替换空格 题目内容&#xff1a; 这是一道简单题&#xff0c;理解题意&#xff0c;就是将字符串s中的空格…

windows系统依赖环境一键安装

window系统程序依赖库&#xff0c;可以联系我获取15958139685 脚本代码如下&#xff0c;写到1. bat文件中&#xff0c;双击直接运行&#xff0c;等待安装完成即可 Scku.exe -AVC.exe /SILENT /COMPONENTS"icons,ext\reg\shellhere,assoc,assoc_sh" /dir%1\VC

性能优化为什么那么重要

性能优化在计算机系统和软件开发中具有重要意义&#xff0c;是衡量工程师技术水平的试金石&#xff0c;是升职加薪必备技能&#xff0c;并且在各个技术领域都发挥举足轻重的作用。 嵌入式领域 嵌入式设备通常具有有限的硬件资源&#xff08;如 CPU、内存、存储空间等&#xff0…

命令行环境

sleep 20 延迟20秒 这个是操作系统的信号机制 ctrl z ^z可以恢复 jobs 可以查看 终端运行工作列表&#xff0c;bg可以将暂停的作业重新运行 通过kill暂停作业 通过 -KILL 之后才可以将 -HUP 作业悬挂起来 终端复路多用 会话 ^a p 上一个会话 ^ a n 下一个会话 别名 左右不能…

idea中创建springboot项目显示Spring Initializr Error

很长时间不创建springboot项目了,今天发现创建完成idea显示: Spring Initializr Error error:status:500项目中没有pom.xml文件.检查了一下原因是在创建的时候类型没有创建正确(之前记得都是默认),默认如下 需要选择创建maven完整工程那种,最下面那种只会生成pom.xml不会…

javaee spring 自动注入,如果满足条件的类有多个如何区别

如图IDrinkDao有两个实现类 方法一 方法二 Resource(name“对象名”) Resource(name"oracleDrinkDao") private IDrinkDao drinkDao;

《Java极简设计模式》第05章:原型模式(Prototype)

作者&#xff1a;冰河 星球&#xff1a;http://m6z.cn/6aeFbs 博客&#xff1a;https://binghe.gitcode.host 文章汇总&#xff1a;https://binghe.gitcode.host/md/all/all.html 源码地址&#xff1a;https://github.com/binghe001/java-simple-design-patterns/tree/master/j…

Unittest自动化测试框架vs Pytest自动化测试框架

引言 前面一篇文章Python单元测试框架介绍已经介绍了python单元测试框架&#xff0c;大家平时经常使用的是unittest&#xff0c;因为它比较基础&#xff0c;并且可以进行二次开发&#xff0c;如果你的开发水平很高&#xff0c;集成开发自动化测试平台也是可以的。而这篇文章主要…

Pico使用C/C++选择使用哪个I2C控制器,以及SDA和SCL针脚

本文一开始讲述了解决方案&#xff0c;后面是我做的笔记&#xff0c;用来讲述我的发现流程和探究的 Pico I2C 代码结构。 前提知识 首先要说明一点&#xff1a;Pico 有两个 I2C&#xff0c;也就是两套 SDA 和 SCL。这点你可以在针脚图中名字看出&#xff0c;比如下图的 Pin 4…

性能测试面试问题,一周拿3个offer不嫌多

性能测试的三个核心原理是什么&#xff1f; 1.基于协议。性能测试的对象是网络分布式架构的软件&#xff0c;而网络分布式架构的核心是网络协议 2.多线程。人的大脑是单线程的&#xff0c;电脑的cpu是多线程的。性能测试就是利用多线程的技术模拟多用户去负载 3.模拟真实场景。…

<C++> STL_容器适配器

1.容器适配器 适配器是一种设计模式&#xff0c;该种模式是将一个类的接口转换成客户希望的另外一个接口。 容器适配器是STL中的一种重要组件&#xff0c;用于提供不同的数据结构接口&#xff0c;以满足特定的需求和限制。容器适配器是基于其他STL容器构建的&#xff0c;通过…