第二章 数据和C
2.1错误和警告
如果输入这个程序的过程中出现错误(error),比如少了一个分号,编译器会给出语法错误消息。即使输入正确,编译器还可能发出这样的警告(warning):“警告------从double类型转换为float类型时可能丢失数据。”错误消息表明程序中存在错误,不能对其编译。警告则表明尽管代码正确但有可能不是程序员所要的。警告不终止编译。这里的的警告和C语言怎样处理770这样的值有关。
2.2数据:数据类型和关键字
1.位、字节和字
术语位、字节和字用于描述计算机数据单位或计算机存储单位。这里主要指存储单位。
最小的存储单位为位(bit)。它可以容纳两个值(0或1)之一。不能在一个位中存储更多的信息,但是计算机中包含数量极多的位。位计算机存储单位的基本单位。
字节(byte)是常用的计算机存储单位。
2.浮点数
浮点数与整数的存储方案不一样。浮点数表示法将一个数分为小数部分和指数部分并分别存储。
整型和浮点型在应用中的区别:
1.整数没有小数部分;浮点数可以有小数部分
2.浮点数表示比整数范围大得多的数
3.对于一些算数运算(例如两个很大的数相减),使用浮点数会损失更多精度
4.因为在任何区间内(比如1.0和2.0之间)都存在无穷多个实数,所以计算机浮点数不能表示区域内的所有值。浮点数往往只是实际值的近似。
5.浮点运算通常比整数运算慢。不过,已经开发出来了专门处理浮点运算的微处理器,它可以缩小速度上的差别。
2.3 C和数据类型
1.整型
①声明int变量
int erns;
以上变量声明创建了变量但没有为其赋值。
②初始化变量
初始化(initialize)变量就是为变量赋一个初始值。声明语句为变量创建、标定存储空间并为其指
③int类型常量
C把不含小数点和指数的数当做整数
④八进制和十六进制
前缀0x或者OX表示使用十六进制,前缀0表示使用八进制
⑤显示八进制和十六进制
如果想显示C语言前缀,可以使用说明符%#o、%#x、%#X分别生成0、0x和0X前缀。
2.其他整数类型
①使用多种整数类型的原因
为什么说long和short类型“可能”占比int类型更多或者更少的存储空间呢?因为C仅保证short类型不会比int类型长,并且long类型不会比int短。这样做是为了适应不同的机器。
一般情况,long long类型64位,long类型为32位,short类型为16位,int类型为16位或者32位(依机器的自然字节大小而定)。
②long常量和long long常量
八进制和十六进制常量通常被称为int类型。如果值过大,编译器会试用unsigned int,如果不够大,编译器会依次试用long、unsigned long、long long和unsigned long long类型。
③打印short、long、long long和unsigned long类型数
要打印unsigned int数字,可以使用%u符号。打印long数值,可以使用%ld格式说明符。可以对short类型使用h前缀,因此%hd表示以十进制显示short整数,%ho表示以八进制显示short整数。
不论使用%hd还是%d,short类型变量end的显示结果相同。这是因为在传递函数参数时C自动将short类型的值转换为int类型。这时可能会有两个疑问:为什么要进行这样的转换?h修饰符的用处是什么?第一个问题的答案是:int类型被认为是计算机处理起来最方便有效的整数类型,所以在short类型和int类型长度不同的系统中,使用int类型值进行参数转移的速度更快;第二个问题的答案是:可以使用h修饰符显示一个较长的整数被截为short类型值时的样子。
3.使用字符:char类型
char类型用于存储字母和标点符号之类的字符。但在技术实现上char却是整数类型,这是因为char类型实际存储的是整数而不是字符。
①字符常量及其初始化
char grade = 'A';
char broiled;
broiled = 'T';
char grade = 65;
②非打印字符
③打印字符
printf()说明符决定数据的显示方式不是决定数据的存储方式
4._Bool类型
5.可移植的类型:inttypes.h
C99提供了一个可选的名字集合,以确切地描述有关信息。例如,int6_t表示一个16位有符号整数类型,uint32_t表示一个32位无符号整数类型。
要使这些名字对于程序有效,应当在程序中包含inttyoes.h头文件。与int不同,uint32_t不是关键字,所以必须在程序中包含inttypes.h头文件,编译器才能识别它。
保证所表示的类型至少大于指定长度的最小类型,被称为“最小长度类型”(minimum width type)。例如,int_least8_t是可以容纳至少8位有符号数的那些类型中长度最小的一个的别名。
当然一些程序员更加关注速度而非空间。C99为他们定义了一组可使计算达到最快的类型集合。这类集合被称为“最快最小长度类型”(fastest minimum width type)。例如,把int_fast8_t定义为系统中对8位有效符号数而言计算机快的整数类型的别名。
C99不仅提供这些新的、可移植的类型名,还提供了对这些类型数据进行输入输出的方法。
6.参数和易犯的错误
传递给函数的信息被称为参数。例如,函数调用printf("Hello, pal")包含一个参数“Hello, pal”。与之类似的,函数调用scanf("%d",&weight)包含两个参数:"%d"和&weight。C用都好隔开函数调用中的多个参数。printf()和scanf()函数比较特殊,其参数数目可以不受限制。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)