在本章中主要学习的是基本数据类型的概念,类型的大小,调用和打印。
在学习基本数据类型之前,要先了解常量与变量。
常量就是预先规定,不会再此发生变化的量,变量则与之相反,会发生变化。
概念
基本数据类型可以分为两大类:整型和浮点型。
储存单元
首先,要认识一下计算机的储存单元
最小的存储单元是位(bit),可以储存0或1。
字节(byte)是常用的计算机存储单位。对于几乎所有的机器,1字节均为8位。既然1位可以表示0或1,那么8位字节就有256(2的8次方)种可能的0、1的组合。通过二进制编码(仅用0和1便可表示数字),便可表示0~255的整数或一组字符。
字(word)是设计计算机时给定的自然存储单位。对于8位的微型计算机(如,最初的苹果机),1个字长只有8位。从那以后,个人计算机字长增至16位、32位,直到目前的64位。计算机的字长越大,其数据转移越快,允许的内存访问也更多。
整型
整型就是整数型,通常有int ,long int,short int,long long int ,unsigned int,unsigned short int等,由它们的名字我们可以知道其最大的不同在于其大小,即占用的储存空间不同。
我们通常使用int类型,long int比int储存空间要大,short int比int的储存空间要小,这是硬性规定,其具体大小在不同机型上有所不同。例如,过去的一台运行Windows 3.x的机器上,int类型和short类型都占16位,long类型占32位。后来,Windows和苹果系统都使用16位储存short类型,32位储存int类型和long类型(使用32位可以表示的整数数值超过20亿)。现在,计算机普遍使用64位处理器,为了储存64位的整数,才引入了long long类型。
现在,个人计算机上最常见的设置是,long long占64位,long占32位,short占16位,int占16位或32位(依计算机的自然字长而定)。
现在,个人计算机上最常见的设置是,long long占64位,long占32位,short占16位,int占16位或32位(依计算机的自然字长而定)。
对于16位机,short和int的最小取值范围是[−32767,32767];对于32位机,long的最小取值范围是[−2147483647,2147483647]。
比较特殊的是unsigned int,unsigned表示这是储存不为负数的数,最小取值范围为[0,4294967295]。long long类型是为了支持64位的需求,最小取值范围是[−9223372036854775807,9223372036854775807];unsigned long long的最小取值范围是[0,18446744073709551615]。
那么,存在这么多的数据类型,我们又该如何选择呢?
首先,考虑unsigned类型。这种类型的数常用于计数,因为计数不用负数。而且,unsigned类型可以表示更大的正数。其次,看int函数,如果该数据过大,选long,long long,如果过小,选short。
字符类型
char类型用于储存字符(如,字母或标点符号),但是从技术层面看,char是整数类型。计算机使用数字编码来处理字符,即用特定的整数表示特定的字符。
C语言允许在关键字char前面使用signed或unsigned。把char实现为有符号类型,这意味着char可表示的范围是-128~127。把char实现为无符号类型,那么char可表示的范围是0~255。
如果要把一个字符常量初始化为字母A,不必背下ASCII码,用计算机语言很容易做到。通过以下初始化把字母A赋给grade即可:
char grade = 'A';
非打印字符(转义序列)
有些ASCII字符打印不出来,C语言提供了3种方法表示这些字符。
第一种是,使用ASCII码。例如,蜂鸣字符的ASCII值是7,因此可以这样写:
char beep = 7;
第2种方法是,使用特殊的符号序列表示一些特殊的字符。也就是转义序列。\a
警报(ANSI C)
\b
退格
\f
换页
\n
换行
\r
回车
\t
水平制表符
\v
垂直制表符
\\
反斜杠(\)
\'
单引号
\"
双引号
\?
问号
\0oo
八进制值(oo必须是有效的八进制数,即每个o可表示0~7中的一个数)
\xhh
十六进制值(hh必须是有效的十六进制数,即每个h可表示0~f中的一个数)
浮点型
浮点型就是小数形式,计算机通常会把浮点数分成小数部分和指数部分来表示,且分开储存这两部分。
C语言中的浮点类型有float、double和long double类型。
C标准规定,float类型必须至少能表示6位有效数字,且取值范围至少是10-37~10+37。前一项规定指float类型必须能够表示33.333333的前6位数字,而不是精确到小数点后6位数字。通常,系统储存一个浮点数要占用32位。其中8位用于表示指数的值和符号,剩下24位用于表示非指数部分(也叫作尾数或有效数)及其符号。
double类型和float类型的最小取值范围相同,但至少必须能表示10位有效数字。一般情况下,double占用64位而不是32位。
C语言的第3种浮点类型是long double,以满足比double类型更高的精度要求。
_Bool类型
C99标准添加了_Bool类型,用于表示布尔值,即逻辑值true和false。因为C语言用值1表示true,值0表示false,所以_Bool类型实际上也是一种整数类型。但原则上它仅占用1位存储空间,因为对0和1而言,1位的存储空间足够了。
复数和虚数类型
简而言之,C语言有3种复数类型:float _Complex、double _Complex和long double _Complex。例如,float _Complex类型的变量应包含两个float类型的值,分别表示复数的实部和虚部。
类似地,C语言的3种虚数类型是float _Imaginary、double _Imaginary和long double _Imaginary。
如果包含complex.h头文件,便可用complex代替_Complex,用imaginary代替_Imaginary,还可以用I代替-1的平方根。
可移植类型:stdint.h和inttypes.h
C语言提供了许多有用的整数类型。但是,某些类型名在不同系统中的功能不一样。C99新增了两个头文件stdint.h和inttypes.h,以确保C语言的类型在各系统中的功能相同。
比如说,使用int32_t类型编写程序,并包含stdint.h头文件时,编译器会把int或long替换成与当前系统匹配的类型。
变量声明
下面都是有效的声明:
int erns;
int hogs, cows, goats;
可以分别在4条声明中声明各变量,也可以在一条声明中声明4个变量。
初始化变量
在C语言中,初始化变量可以在声明时进行。
以下为三种方式,且最后一种只是对cats进行赋值,容易出错。
cows = 112;int hogs = 21;
int cows = 32, goats = 14;
int dogs, cats = 94; //有效,但是这种格式很糟糕
数据的打印
可以使用printf()函数打印数据类型的值。
列如,%d指明了在一行中打印整数的位置。%d称为转换说明,它指定了printf()应使用什么格式来显示一个值。
打印unsigned int类型的值,使用%u转换说明;打印long类型的值,使用%ld转换说明。C语言有多种printf()格式。对于short类型,可以使用h前缀。
printf()函数使用%f转换说明打印十进制记数法的float和double类型浮点数,用%e打印指数记数法的浮点数。
printf()函数用%c指明待打印的字符。
特别要注意的是,在使用打印函数时,要关注其大小,不然可能出现溢出,其次要一一对应,最后要注意使用的是十进制,八进制还是十六进制。
进制
以十进制显示数字,使用%d;以八进制显示数字,使用%o;以十六进制显示数字,使用%x。
另外,要显示各进制数的前缀0、0x和0X,必须分别使用%#o、%#x、%#X。
我们可以用下面这段代码看看其差别
/* bases.c--以十进制、八进制、十六进制打印十进制数100 */
#include
int main(void)
{ int x = 100;
printf("dec = %d;
octal = %o;
hex = %x\n", x, x, x);
printf("dec = %d; octal = %#o; hex = %#x\n", x, x, x);
return 0;
}
标签:第三章,int,32,long,C语言,double,类型,数据
From: https://blog.csdn.net/jjwm123/article/details/143645864