第4章 基本数据类型

本章将重点介绍C语言提供的三组基本数据类型的使用,包括:整型、字符型和浮点型。C语言的其他高级数据类型实质上都可以视为这些基本数据类型的组合。通过本章的学习,要掌握以下知识:

  • 各种整型数据类型的使用;
  • 各种字符型数据类型的使用;
  • 各种浮点型数据类型的使用;
  • 使用 printf 函数和 scanf 函数处理各种类型的数据;
  • 使用 typedef 自定义数据类型;
  • 限定词 const 和volatile的使用。

4.1 整型数据类型

C语言定义了4种整型数据类型以表示不同大小的整数数值。

  • short int:短整型
  • int:整型
  • long int:长整型
  • long long int:长长整型

本节将介绍各种整型数据类型的字节长度、整型常量和整型变量的使用,以及使用整型类型的存储方式和范围。

4.1.1 字节长度

在不同的编译器和不同的硬件环境中,整型数据类型的字节长度可能不同,但是都具有以下关系:short int 型的长度不大于 int 型的长度,int 型的长度不大于 long int 型的长度,long int 型的长度不大于 long long int 型的长度。

【范例4-1】 输出各整型的字节长度,实现方法如示例代码4-1所示。

示例代码4-1

   #include <stdio.h>int main(void){printf("sizeof(short int) = %d\n, sizeof(short int)"); /*输出short int型的字节长度*/printf("sizeof(int) = %d\n, sizeof(int)");             /*输出int型的字节长度*/printf("sizeof(long int) = %d\n", sizeof(long int));  /*输出long int型的字节长度*/printf("sizeof(long long int = %d\n)", sizeof(long long int)); /*输出long long int型的字节长度*/return 0;
}

【代码解析】程序中是用来字节操作符sizeof,其使用方式为: sizeof(数据类型)

sizeof 的作用是得到数据类型所占空间,以字节为单位。括号中也可以是变量、常量或其他表达式。

4.1.2 符号修饰符

C语言中,signed 和unsigned 称为符号修饰符,可以用来作为上面四种整型数据类型的前缀,以组成有符号整数和无符号整数。带signed 前缀的数据类型和没有符号修饰的整型一样,都可以表示所有的整数;而带unsigned 修饰的数据类型都只能用来表示无符号数,即非负整数。

符号修饰符不会改变数据类型的字节长度,所以signed 和unsigned 型所能表示的整数个数是一样的,但是它们表示的整数范围是不同的。

4.1.3 整型常量

整型常量是指用以表示整型数值的常量,有四种。每种分为有符号型和无符号型。

4.1.4 整型变量

整型变量是指用以存储整型数值的变量,有四种。每种分为有符号型和无符号型。

4.1.5 存储方式

整型按照存储方式和数值区间的不同,可分为两大类:有符号整型和无符号整型。有符号整型在内存中的存储分为两部分:符号部分和数值部分。

符号部分占1位。0为非负数,1为负数。其余部分都属于数值部分,整数变量的数值以二进制的形式存放在该部分中。而无符号整型的存储方式相对简单,只有数值部分。

4.1.6 数值范围

不同整型数据的字节长度不同,因此,它们可表示的数值范围也是不同的。

4.2 字符型数据类型

C语言中的字符型数据只有一种,即 char 型数据类型。使用符号修饰符还可以得到无符号字符型和有符号字符型。

4.2.1 字节长度

在C语言标准中,char 型的字节长度被定义为1,即8位。

4.2.2 字符常量

字符常量,即用以表示字符的常量。C语言中的字符常量都包含在单引号中,单引号内具体的内容可以分为两种。

  1. 单个字符:单个字符常量是指单引号内只含一个字符的常量。

  2. 转义字符:以反斜杠(\)开头的转义字符,其作用是把反斜杠后面的字符转换为特定形式。

4.2.3 字符变量

字符变量是用于存储字符型数值的变量。字符型变量也有两种:有符号型和无符号型。对字符型变量有两种赋值方式。一种是字符常量,另一种是整型数值赋值,整型数值会自动转化为相应的ASCII码赋值给字符变量。
(此处易忽略)比如: char c1 = 97; 此处97为ASCII值,对应的控制字符为‘a’

【范例4-7】展示字符型变量的使用,实现方法如示例代码4-7所示。

示例代码4-7

#include <stdio.h>
#include<stdlib.h>     //为了解决VS2013闪退加的int main(void) {char c1 = '\n';unsigned char c2 = '\t';char c3 = 49;printf("c1 = [%c], [%d]\n", c1, c1);printf("c2 = [%c], [%d]\n", c2, c2);printf("c3 = [%c], [%d]\n", c3, c3);system("pause");     //为了解决VS2013闪退加的return 0;
}

【运行结果】程序运行后,得到结果如图4-10所示。

图4-10 字符型变量的使用

【代码解析】转义字符‘\n’的作用是换行,第一个printf函数里的 %c 处会替换为 ‘\n’,输出到终端上则会替换为换行;%d则为 c1 的 ASCII 码值代替。转义字符 ‘\t’ 的作用为水平制表,第二个 printf 里的%c 会替代 ‘t’, 输出到终端上,则替代为水平制表(即跳到下一个Tab位置),%d 同样被 c2 的 ASCII 值代替。数值 49 对应的 ASCII 码为’1’,第三个 printf 里的%c 将替代为‘1’,%d 将替代为整数49。

4.2.4 存储方式

字符型数据类型的存储方式和整型十分相似。

  • 有符号字符型和有符号整型一样,最高位为符号位,其余部分都属于数值部分,其值等于该字符型数据的数值的绝对值。

  • 无符号字符型只含数值部分。

4.3 浮点型数据类型

C语言共定义了三种浮点型数据类型来表示不同精度和不同数值范围的浮点数。

  • Float:单精度型;
  • Double:双精度型;
  • long double:长双精度型。

本节先讨论字节长度,再讨论浮点型常量和变量的使用,最后讨论各个浮点型数据类型的精度、数值范围和存储方式。

4.3.1 字节长度

规定:float 型不大于 double 型,double 型不大于 long double 型。在不同编译器和不同硬件环境下,各类型的字节长度有所变化。Visual C++ 2005 环境下,float 型字长为 4 字节,即 32 位;double 型和 long double 型字长为 8 字节,即 64 位。

4.3.2 浮点型常量

浮点型常量是用以表示浮点数值的常量。C语言中的浮点型数值默认为双精度类型,可以使用 f 或 F 作为后缀得到单精度型常量,或使用 l 或 L 作为后缀得到长双精度常量。它们的表示有小数和指数两种形式。

  • 小数形式的示例有:1500.13/3.1415926、-0.007。
  • 指数形式有三部分:数值1、e 或 E、数值2,其值等于(数值1)×(10
    的(数值2)次方)。上述小数形式的示例用指数形式表示依次为:1.50013e3、31415.926E-4、-0.7e3,中间的e大小写均可。
  • 浮点型常量的整数部分为 0 时,省略整数部分的 0 也是合法的,比如:-0.007 可以写为-.007,-0.7e3可以写为-.7e3。
  • 指数形式中,e 前面必须为数字,也必须有数字;e 后面必须为整数,也必须有整数。

4.3.3 浮点型变量

浮点型变量是用以存储浮点型数值的变量。三种浮点型变量定义变量的形式:

  • float f ;
  • double d ;
  • long double ld ;

printf 函数与 scanf 函数处理浮点型数据的格式如下表所示:

数据类型 字节长度 精度 数量级范围(10的次方) printf 和 scanf 格式
float(f) 4 7 -38 ~ 38 %f
double 8 约16 -308 ~ 308 %f
long double(l) 12 约19 -4932 ~ 4932 %llf

4.3.4 精度

不同浮点型的精度不同,精度从低到高依次为 float 型、double 型和 long double 型。精度是指精确到小数点后的位数,位数越多,精度越高。

4.3.5 数值范围

不同浮点型可表示的数值范围也不同,由于浮点型在内存中是以科学计数法的方式来存储的,其数值范围只能使用数量级范围来表示。可表示的数量级范围从小到大依次为 float 型、double 型和 long double 型。

4.3.5 存储方式

以 Linux 下的 GCC 3.2.2 的实现为例,讨论浮点型的存储方式。

1.符号位:浮点型的符号位只有一位,为其最高位。如果该位为1,则表示其为负数;如果该位为0,则表示其为非负数。

2.指数位:浮点型的指数为以补码形式存储,其科学计数法表示形式的指数部分。指数位决定浮点型可存储的数值范围。但,真正的指数值为该类型的偏差值减去该存储值的结果。每种类型的偏差值是固定的。

3.基数位:基数位是浮点型的最后一部分,其位数决定了精度。

4.4 用户自定义类型

除了C语言自带的数据类型外,程序员还可以使用关键字 typedef 定义数据类型。

标准形式: /*typedef 原数据类型 新数据类型 */

如:typedef char myChar;
使用 typedef 可以简化复杂的类型声明;提高程序的可维护性和可移植性;自定义数据类型集。

4.5 限定词 const 与 volatile

它们是两个数据类型限定词,均在变量定义中使用。使用 const 的形式如下:

const 数据类型名 变量名 = 初始值;

或者:数据类型名 const 变量名 = 初始值;

使用 const 变量有以下好处:提高程序的可读性;提高程序的可维护性;避免只读变量被意外修改;提高程序效率。

使用 volatile 告诉编译器其修饰的变量是随时可能变化的,编译器优化时必须每次都重新读取这个变量的值,而不是使用保存在寄存器里的备份。volatile 无须初始化,标准使用形式为:volatile 数据类型名 变量名;
或:数据类型名 volatile 变量名;
volatile 限定词的主要目的是提示编译器,每次读取器数据时,都会老老实实地从内存中读取,不会对其优化,在多线程环境下经常使用 volatile 变量。

21天学通C语言-学习笔记(4)相关推荐

  1. 21天学通C语言-学习笔记(3)

    第三章 变量与常量 在C程序中,使用常量和变量两种形式来存储和表示数值.为了保存各种不同的数据,C语言定义了一系列的数据类型.本章将重点讨论常量和变量的使用方法.通过本章的学习,要重点掌握以下内容: ...

  2. 《21天学通C语言(第6版•修订版)》一导读

    前 言 21天学通C语言(第6版•修订版) 本书旨在引导读者在21天内学通C语言编程.虽然有来自诸如C++.Java和C#的激烈竞争,但很多初学编程者还是会选择C语言.正如第1天课程介绍的原因,选择C ...

  3. 《21天学通C语言(第7版)》一2.2 程序的组成部分

    本节书摘来自异步社区<21天学通C语言(第7版)>一书中的第2章,第2.2节,作者 [美]Bradley Jones , Peter Aitken , Dean Miller,更多章节内容 ...

  4. 21天学通c语言第四版pdf,21天学通Visual C++ PDF扫描版[116MB]

    21天学通Visual C++ 内容简介: 本书是Visual C++语言的入门教程,较全面地介绍了Visual C++编程的相关知识,然而,本书并没有泛讲Visual C++语言的所有知识,而是突出 ...

  5. 21天学通c语言思维导图,21天思维导图学习 ----开发脑洞、助力成长

    kk      第一次知道"思维导图"这个词,是在参加Grace创办的第一期"成长集训营".她建议我们用思维导图的方式去完成每天的思考作业,了解和认知也仅在于它 ...

  6. 21天学通Java学习笔记-Day01

    21天学通java 中文第6版 下载地址:点击打开链接 Day01: 命令行查看和设置classpath: 查看:echo %classpath% 设置:set classpath = %classp ...

  7. 21day学通python epub_21天就让你掌握Python语言,《21天学通Python》PDF版送给你去学...

    Python的学习书籍小编看过很多,但是这本<21天学通Python>真的是堪称极品! 本书的作者团队成员为一线开发工程师.资深编程专家或专业培训师,在编程开发方面有着丰富的经验,并已出版 ...

  8. ole2高级编程技术 pdf_21天快速掌握Python语言,《21天学通Python》PDF版送给你去学...

    Python的学习书籍小编看过很多,但是这本<21天学通Python>真的是堪称极品! 本书的作者团队成员为一线开发工程师.资深编程专家或专业培训师,在编程开发方面有着丰富的经验,并已出版 ...

  9. C语言学习书籍推荐《学通C语言的24堂课》下载

    下载地址:点我 编辑推荐 <学通C语言的24堂课>: 用持续激励培养良好习惯以良好习惯铸就伟大梦想 --致亲爱的读者朋友 在开始学习<学通C语言的24堂课>的同时,强烈建议读者 ...

  10. 21天学通Python,从入门到上手,学习方式+学习资料+学习视频汇总,零基础转行自学必备

    前言 python的学习资料小编看过很多,但是这个21天学通python真的是堪称极品!作者团队成员为一线开发工程师.资深编程专家或专业培训师,在编程开发方面有着丰富的经验,颇受广大读者认可.长期积累 ...

最新文章

  1. html中<pre>标签
  2. 开源一个友盟 for android 操作的封装包
  3. SAP OData服务性能测量的几种工具和手段
  4. html无限添加元素,jquery--html【添加元素】
  5. 新手入坑 java的开发语言环境
  6. sudo命令_如何用一条sudo命令让标志性的Mac开机提示音回归
  7. 数字化转型的4个阶段,从报表到可视化再到数据平台,谁更重要?
  8. 手机modem开发(3)---Android Modem log分析
  9. BootStrap中Affix控件的使用方法及如何保持布局的美观
  10. asp.net MVC中怎样让LINQ Designer自动生成的类从别的类继承并调用其基类构造器?...
  11. 枚举一个集合的所有子集
  12. 正则表达式之非捕获组
  13. mysql的配置文件名称是_【MySQL学生手册】MySQL的配置文件
  14. 面试题大全2-技能提升-项目部分-运维
  15. html css纯写桌球运动轨迹,纯JS实现椭圆轨迹运动的代码
  16. C语言英文字符的使用
  17. 计算机网络——数字信号(五)
  18. Google IO 2018开发者大会:Android P
  19. TPYBoard中编译MicroPython并利用DfuSe经行固件烧录
  20. 关于平衡组的一个例子

热门文章

  1. 苹方字体 for linux,苹果苹方字体/苹方黑体全套完整版下载(ttf版)
  2. 如何让网页字体文件大瘦身?前端字体优化知多D
  3. chrome插件介绍
  4. config system丢失
  5. 计算机组成原理——课程设计
  6. 把pdf转为高清jpg图片,其dpi为300以上
  7. vba调JAVA并接收返回值_如何从VBA函数返回结果
  8. 原生开发什么意思_原生开发才是王道
  9. 网关和路由器有什么区别
  10. Access2010中文版入门与实例教程(奋斗的小鸟)_PDF 电子书