学习笔记2.(C 语言里的基本数据类型)

本文介绍了C语言中的基本数据类型,包括int、short、long、long long等整数类型,以及unsigned整数类型和其表示范围。还讨论了char类型,包括字符常量、非打印字符以及有符号和无符号的差异。此外,提到了C99引入的_bool类型,以及浮点类型float、double和long double的声明和使用。文章最后简要提及了复数和虚数类型。

ps:从C Primer Plus(第6版)中文版,整理至此
C 语言里的基本数据类型:
1.int类型
        在32/64位系统中都是32位,范围为-2147483648~+2147483647,无符号情况下表示为0至4294967295。
2.其他整数类型
(1.)short int类型(或者简写为short)占用的存储空间可能比int类型少,以节省空间。与int类似,short 是有符号类型。
(2.)long int或long占用的存储空间可能比int多,适用于较大数值的场合,与int类似,long是有符号类型。
(3.)long long int 或long long (C99标准加入)占用的储存空间可能比long多,适用于更大数值的场合。该类型至少占64位。与int类似,long long是有符号类型。
.(4.)unsigned int 或unsigned只用于非负值的场合。这种类型与有符号类型表示的范围不同。例如,16位unsigned int 允许的取值范围是0至65535,而不是-32768~32767。用于表示正负号的位现在用于表示另一个二进制位,所以无符号整型可以表示更大的数。
(5.)在C90标准中,添加了unsigned long int 或unsigned long 和unsigned short int 或unsigned short类型。C99标准又添加了unsigned long long int或unsigned long long。在任何有符号类型前面添加关键字 signed,可强调使用有符号类型的意图。例如,short、short、int、signed short、signed short int 都表示同一种类型。

2.其他整数类型
        其他整数类型的声明方式与int类型相同,下面列出了一些例子。 不是所有的C编译器都能识别最后条声明,最后一个例子所有的类型是C99标准新增的。
long int estine;
long johns;
short int erns;
short ribs;
unsigned int s_ count;
unsigned players;
unsigned long headcount;
unsigned short yesvotes;
long long ago;

(1.)long常量和long long 常量
        通常,程序代码中使用的数字(如,2345)都被储存为int类型。如果使用1000000这样的大数字,超出了int类型能表示的范围,编译器就会将其视为long int类型(假设这种类型可以代表该数字)。如果数字超出long可表示的最大值, (前提是编译子器能识别这些数字)如果数字够大,编译器会依次使用long、unsigned long、 long将其视为long long或unsigned long类型。
        八进制和十六进制常量被视为int类型。long类型如果值太大,编译器会尝试使用unsigned int。
        类似地,在支持long long类型的系统中,也可以使用11或LL后缀来表示long long 类型的值,如3LL。另外,u或U后缀表示unsigned long long,如5ull、10LLU、6LLU或9Ull。
3.char 类型
        C语言把1字节定义为char类型占用的位(bit)数,因此无论是16位系统还是32位系统,都可以使用char类型。
(1.)声明char类型变量
        char类型变量的声明方式与其他类型变量的声明方式相同。下面是一些例子:
char response;
char itable, latan;
以上声明创建了3个char类型的变量:response、itable、latan。
(2.)字符常量和初始化
        如果把一个字符变量初始化为字母A,不必背下ASCII码,用计算机语言很容易做到。通过以下初始化把字母A赋给grade即可;
char grade=‘A’;
(3.)非打印字符
        单引号只适用于字符、数字和标点符号,浏览ASCII表会发现,有些ASCII字符打印不出来。例如,一些代表行为的字符(如,退格、换行、终端响铃或蜂鸣)。C语言提供了3种方法表示这些字符。
        第1种方法——使用ASCII码。例如,蜂鸣:char beep=7;
        第2种方法——使用特殊的符号序列表示一些特殊的字符。这些符号序列叫做转义序列

转义序列含义
\a警报
\b退格
\ f换页
\n换行
\r回车
\t水平制表符
\v垂直制表符
\\反斜杠
\’单引号
\"双引号
\?问号
\0oo八进制值(oo必须是有效的八进制数,即每个o克表示0~7中的一个数)
\xhh十六进制值(hh必须是有效的十六进制数,即每个h可表示0~f中的一个数)

(4.)打印字符
printf(“The code for %c is %d.\n”,ch,ch);
输出示例:The code for C is 67.
(5.)有符号还是没符号
        有些C编泽器把char实现为有符号类型,这意味着char可表示的范围是-128~127。而有些C编译器把char实现为无符号类型,那么char可表示的范围是0到255。
        根据C90标准,C语言允许在关键字char前面使用signed或unsigned。这样无论char是什么类型,signed char表示有符号类型,而unsigned char表示无符号类型。这在用char类型处理小整数时很有用。如果只用char处理字符,那么char前面无需使用任何修饰符。
4._bool类型
        C99标准添加了_bool 类型,用于表示布尔值,即逻辑值true和false。因为C语言用值1表示true,值0表示false,所以_bool类型实际上也是种整数类型。但原则上它仅占用1位存储空间,因为对0和1而言,1位的存储空间是足够了。程序通过布尔值可选择执行哪部分代码。
5.可移植类型:stdint.h和inttypes.h
        C语言提供了许多有用的整数类型。但是,某些类型名在不同系统中的功能不一样。 C99 新增了两个头文件stdint.h和inttypes.h,以确保C语言的类型在各系统中的功能相同。
        C语言为现有类型创建了更多类型名。这些新的类型名定义在stdint.h头文件中,例如,int32_t表示32位的有符号整数类型。在使用32位int的系统中,头文件会把int32_t作为int的别名。不同的系统也可以定义相同的类型名。例如,int 为16位、long 为32位的系统会把int32_t 作为long的别名。然后,使用int32_ t类型编写程序,并包含stdint.h头文件时,编译器会把int或long替换成与当前系统匹配的类型。
        上面讨论的类型别名是精确宽度整数类型(exact-width integer type)的示例。int32_ t表示整数类型的宽度正好是32位。但是,计算机的底层系统可能不支持。因此,精确宽度整数类型是可选项。
        如果系统不支持精确宽度整数类型怎么办? C99 和C11提供了第2类别名集合。一些类型名保证所表示的类型一定是至少有指定宽度的最小整数类型。这组类型集合被称为最小宽度类型(minimum width type)。例如,int_ least8_t是可容纳8位有符号整数值的类型中宽度最小的类型的一个别名。如果某系统的最小整数类型是16位,可能不会定义int8_ t类型。尽管如此,该系统仍可使用int_ least8_t类型,但可能把该类型实现为16位的整数类型。
        当然,一些程序员更关心速度而非空间。为此,C99和C11定义了一组可使计算达到最快的类型集合这组类型集合被称为最快最小宽度类型(fastest minimum width type)。例如,int_ fast8_ t被定义为系统中对8位有符号值而言运算最快的整数类型的别名。
6.float、double和long double
        各种整数类型对大多数软件开发项目而言够用了。然而,面向金融和数学的程序经常使用浮点数。C语言中的浮点类型有float, double和long double类型。它们与FORTRAN和Pascal中的real类型一致。前面提到过,浮点类型能表示包括小数在内更大范围的数。类似于科学记数法(即用小数乘以10的幂来表示数字)。该记数系统常用于表示非常大或非常小的数。
(1.)声明浮点型变量
浮点型变量的声明和初始化方式与整数类型变量相同,下面是一些例子:
float noah,jonah;
double trouble;
float planck=6.63e-34;
long double gnp;
(2.)浮点型变量
        在代码中,可以用多种形式书写浮点型常量。浮点型常量的基本形式是:有符号的数字(包括小数点),后面紧跟e或E,最后是一个有符号数表示10的指数。下面是两个有效的浮点型常量:
-1.56E+12
2.87e-3
        正号可以省略。可以没有小数点(如,2E5) 或指数部分(如,19.28), 但是不能同时省略两者。可以省略小数部分(如,3.E16) 或整数部分(如,.45E-6), 但是不能同时省略两者。下面是更多的有效浮点型常量示例:
3.14159
.2
4e16
.8E-5
100.
不要在浮点型常量中间加空格: 1.56 E+12 (错误!)
        默认情况下,编译器假定浮点型常量是double类型的精度。例如,假设some是float类型的变量,编写下面的语句:
some=4.0*2.0;
        通常.4.0 和2.0储存为64位的double类型,使用双精度进行乘法运算,然后将乘积截断成float类型的宽度。这样做虽然计算精度更高,但是会减慢程序的运行速度。
        在浮点数后面加上f或F后缀可覆盖默认设置,编泽器会将浮点型常量看作float类型,如2.3f和9.11E9F。使用1成L后缀使得数字成为long double类型,如54.31和4.32L。注意,建议使用L后缀,因为字母l和数字1根容易混滑。没有后缀的浮点型需常量是double类型。
(3.)打印浮点值
        printf()函数使用%f转换说明打印十进制记数法的float和double类型浮点数,用%e打印指数记数法的浮点数。如果系统支持十六进制格式的浮点数,可用a和A分别代替e和E。打印long double型要使用%Lf、%Le或%La转换说明。给那些未在函数原型中显式说明参数类型的函数(如,printf())传递参数时,C编译器会把float类型的值自动转换成double类型。
7.复数和虚数类型
        许多科学和工程计算都要用到复数和虚数。C99 标准支持复数类型和虚数类型,但是有所保留。一些独立实现,如嵌入式处理器的实现,就不需要使用复数和虚数(VCR芯片就不需要复数)。一般而言,虚数类型都是可选项。CII标准把整个复数软件包都作为可选项。
        简而言之,C语言有3种复数类型: float Complex、 double Complex和long double_Comolex。例如,float_Complex 类型的变量应包含两个float类型的值,分别表示复数的实部和虚部。类似的,C语言的3种虚数类型float_ Imaginary、double_Imaginary 和long double_Imaginary。
        如果包含complex.h头文件,便可用complex代替_Complex. 用imaginary代替_imaginary,还可以用I(i的大写)代替-1的平方根。
        为何C标准不直接用complex作为关键字来代替Complex, 而要添加一个头文件(该头文件中行complex定义为_Complex) ?因为标准委员会考虑到,如果使用新的关键字,会导致以该关键字作为标识符的现有代码全部失效。例如,之前的C99,许多程序员已经使用struct complex 定义一个结构表示复数或者心理学程序中的心理状况(关键字struct用于定义能储存多个值的结构)。让Complex成为关键字会导致之前的这些代码出现语法错误。但是,使用struct_Complex 的人很少特别是标准使用首字母是下划线的标识符作为预留字以后。因此,标准委员会选定_Complex 作为关键字,在不用考虑名称冲突的情况下可选择使用complex。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值