C Primer Plus 学习笔记 第3章 数据和C

这篇博客详细介绍了C语言的基本数据类型,包括整数、浮点数、字符和布尔类型。讲解了各种类型的存储方式、使用方法及转换,并提到了C99新增的类型和头文件。还讨论了数据类型的大小、初始化、输出格式以及常见的陷阱,如类型匹配和溢出问题。
摘要由CSDN通过智能技术生成

最近一直忘了写,慢慢写吧,书已经读完了。

全书共分17章,这是关于本书第3章内容的博客。本章主要介绍了基本数据类型,本章细节的地方很多,不要太陷进去。博客的目录和书上目录是相似的。此系列博客的代码都在Visual Studio 2022环境下编译运行。

我目前大一刚刚结束,水平有限,博客中若有错误或者总结不到位的地方也请见谅。

目录

3.1 示例程序

3.2 变量与常量数据

3.3 数据:数据类型关键字

3.3.1 整数

3.3.2 浮点数

3.4 C语言基本数据类型

3.4.1 int类型

3.4.2 其他整数类型

3.4.3 使用字符:char类型

3.4.4 _Bool类型

3.4.5 可移植类型:stdint.h和inttypes.h

3.4.6 float、double和long double

3.4.7 复数和虚数类型

3.4.8 其他类型

3.4.9 类型大小

3.5 使用数据类型

3.6 参数和陷阱

3.7 转义序列实例


3.1 示例程序

在编写程序时,如果出现语法错误,编译器会报错,此时无法继续编译。有时,编译器会给出一些警告,警告不会终止编译,警告表明代码有效,但是可能不是程序员想要的。

完成输入后按Enter键表明输入完成。

3.2 变量与常量数据

有些数据在程序使用之前就预设好了,在程序运行过程中不会发生变化,称为常量。有些数据的值在运行过程中会变化,称为变量

3.3 数据:数据类型关键字

不同的数据类型也有差异,C语言通过基本的数据类型来区分和使用不同的数据类型。如果是常量,编译器通过形式来识别类型。如果是变量,则要在声明时指定类型。

90ed07cae27c42a89f7eb60c780738e6.jpg

C语言中,关键字int表示基本的整数,long,short,unsigned,signed用于提供基本整数类型的变式。char用于指定字符和较小的整数。float,double和long double表示带小数点的数。_Bool表示布尔值,_Complex表示复数,_Imaginary表示虚数。

C语言的数据类型分为整数类型浮点数类型。对我们来说整数和浮点数的区别是书写方式不同,对计算机来说是存储方式不同。

(也称比特)是计算机中最小的存储单元,可以存储01,位是计算机内存的基本构件块。

1字节等于8位。是计算机给定的自然存储单位,计算机每个字包含的位称为字长字长一般为16,32,64。

3.3.1 整数

整数没有小数部分,在计算机中以二进制补码形式存储。

3.3.2 浮点数

浮点数有小数点,类似于数学的实数。浮点数和整数的存储方式不同。浮点数分开存放小数部分和指数部分。浮点数可以表示的范围比整数大。浮点数通常只是实际值的近似值。

3.4 C语言基本数据类型

3.4.1 int类型

C语言提供了很多整数类型,目的是让程序员根据不同情况选择不同的类型。整数类型一般使用int

int类型可以是正整数、负整数或0。一般一个int类型数据需要一个字长,与具体系统有关。

声明int变量先写int,再写变量名,最后加分号。声明多个变量时用逗号分隔。

初始化变量就是为变量赋初始值,在声明时完成,直接在变量名后面加上赋值运算符=和需要的值。最好不要把初始化的变量和未初始化的变量放在同一声明中。

可以使用printf()函数输出int类型的值,应使用转换声明%d。%d指明了输出的位置,每个%d与待输出变量列表的int值匹配,可以是常量、变量或表达式的值。转换说明的数量与待输出值的数量应该相同,否则会产生一些错误。

C语言假定整形常量是十进制,也支持八进制十六进制0x0X前缀表示十六进制,0前缀表示八进制。输出不同进制要用不同的转换声明。%d表示十进制,%o表示八进制,%x表示十六进制。如果要显示前缀0、0x和0X,要使用%#o,%#x,%#X。

3.4.2 其他整数类型

C语言提供short,longunsigned修饰基本整数类型。

short int(或short)占用的存储空间可能比int少,常用于较小数值的场合以节省空间,是有符号类型。

long int(或long)占用的存储空间可能比int多,适用于较大数值的场合,也是有符号类型。long long int(或long long)占用的空间可能比long多,适用于更大数值的场合,至少占64位,也是有符号类型。

unsigned int(或unsigned)类型是无符号类型,只表示非负数。对应有符号类型用于表示正负号的首位用于表示一个二进位,可以表示更大的正整数。

在任何有符号类型前加signed强调有符号。加signed和不加signed的效果是相同的。

声明其他整数类型的方式与声明int相同。

C语言只规定short的存储空间不多于int,long的存储空间不少于int,具体情况由具体机器实现。

要将一个整数视为long类型,可以在末尾加上l(小写L)或L后缀,使用L更好,因为l和1相似。可以使用ll或LL后缀表示long long型。

数值超出相应取值范围会导致溢出,是未定义行为,会输出其他值。

输出unsigned int类型使用%u转换声明,输出long类型使用%ld转换声明。转换声明中要用小写。

输出short类型可以使用%h前缀,h和l前缀都可以和u一起使用表示无符号。

使用错误的转换声明会得到意想不到的结果。

3.4.3 使用字符:char类型

char类型用于存储字符,但实际上存储的是整数。

计算机使用数字编码来处理字符,用特定的整数表示特定的字符,如ASCII码。ASCII码的范围是0-127,因此用一个字节即可表示。char类型足以存储系统的基本字符集。很多字符集超过了127和255,Unicode可以表示世界范围内多种字符集。

C语言的1字节是char类型占用的位数。

char类型变量的声明和其他整数类型相同。

用单引号括起来的单个字符被称为字符常量,可以用于char类型变量的初始化与赋值。编译器会转化为对应的编码值。C语言将字符常量视为int类型。

也可以使用数值对char类型变量赋值,但最好使用字符常量赋值。

有些字符输出不出来,如退格、换行。可以使用对应ASCII码值,也可以用转义序列,用转义序列更好。

转移序列用于表示一些特殊的字符,使用转义序列赋值时必须用单引号括起来。

7a5799fc3f574fc18771b959d4bbd0b3.jpg

 0947968976a74021a108857f52205dc6.jpg

要注意数字和数字字符的区别。

无论是普通字符还是转义序列,只要是双引号括起来的字符集合,就无需用单引号括起来,双引号中的字符集合叫字符串

%c输出待输出的字符。如果用%d输出待输出字符,结果是一个整数。转换说明决定显示方式,而不是存储方式。

编译器的char类型有无符号由具体编译器实现。

3.4.4 _Bool类型

C99标准新增_Bool类型,用于表示布尔值truefalse。C语言用1表示true,0表示false。_Bool类型实际也是一种整数类型。

3.4.5 可移植类型:stdint.h和inttypes.h

C99新增了两个头文件stdint.h和inttypes.h确保C语言的类型在各系统的功能相同。

这部分可参考对应头文件,前期用不到。

3.4.6 float、double和long double

C语言的浮点类型有float、double和long double,浮点数包括小数部分,表示范围更大。

表示的精度和范围:long double>=double>float,具体表示与系统有关。现在多使用IEEE 754。

浮点数类型变量的声明与初始化和整型相同。可以使用指数计数法,也可以用一般计数法。可以省略整数部分,也可以省略小数部分,但不能同时省略两者。

在小数后加L或l表示long double型。

C99新增了用十六进制表示浮点常量,加上前缀0x或0X,用p和P代替e和E,用2的幂代替10的幂。

%f输出一般计数法表示的float和double型变量,用%e输出指数计数法表示的浮点数。输出long double要在前面加L。支持十六进制可用a和A代替e和E。

如果数字过大,超过当前类型能表达范围时,会发生上溢,用printf函数输出会显示inf或infnity等具有无穷含义的内容。

如果所得数字过于接近0,超过了下限,会发生下溢

浮点数NaN表示未定义或不可表示的值。

3.4.7 复数和虚数类型

C99标准支持复数和虚数类型。

C语言有三种复数类型,float_Complex,double_Complex,long double_Complex。对应实部和虚部都是float,double,long double型。

C语言有三种虚数类型,float_Imaginary,double_Imaginary,long double_Imaginary。

如果包含complex.h头文件,便可用complex代替_Complex,用imaginary代替_Imaginary,用I代替-1的平方根。

3.4.8 其他类型

C语言还有从基本类型衍生的其他类型,如数组、指针、结构等,在后面章节中。

3.4.9 类型大小

sizeof字节为单位给出指定类型的大小。C99和C11使用%zd转换声明匹配sizeof的返回类型(size_t类型)。

limits.hfloat.h头文件有类型限制相关信息。

3.5 使用数据类型

编写程序时,要合理选择所需变量及其类型。要选择有意义的变量名。初始化变量要使用与变量类型相匹配的常数类型。如果把值赋给不同类型的变量,编译器会转化为变量的类型。

C编译器把小数转换为整数时会发生截断,丢弃小数部分,不进行四舍五入。

3.6 参数和陷阱

printf()和scanf()的参数数量是可变的,要确保转换说明的数量、类型与后面参数的数量和类型匹配,否则会出现意外的值。

3.7 转义序列实例

printf()函数把输出发送到缓冲区,然后缓冲区的内容再发送到屏幕上。当缓冲区满,遇到换行字符或需要输入时将缓冲区的内容发送到屏幕上。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值