【自用C语言篇】关于C的基本类型

1. 数据类型关键字

最初的数据类型关键字C90标准添加的数据类型关键字C99标准添加的数据类型关键字
intsigned_Bool
longvoid_Complex
short_Imaginary
unsigned
char
float
double

2. 计算机的存储方式与C语言

在C语言中,int表示整数类型,char用于表示字符和较小的整数,float和double用于表示带小数点的数。long,short,unsigned和signed用于提供基本整数类型的变式,具体来说是对计算机提供更精准的描述,具体会单独再详细说明。_Bool表示布尔值(true和false),_Complex和_Imaginary分别表示复数和虚数。
根据关键字的类型,按计算机的存储方式可分为两大基本类型:整数类型浮点数类型

计算机是以二进制的形式来存储数据
位、字节和字是描述计算机数据单元或存储单元的术语。
位、字节、字是计算机数据存储的单位。
位是最小的存储单位,每一个位存储一个1位的二进制码。
字节是常用的计算机存储单元,一个字节由8位组成。
字是设计计算机时给定的自然存储单元,根据设备的不同,字通常为16、32或64个位组成。
计算机的字长越大,其转移数据的速度越快,允许访问的内存也越多

3. 整数与浮点数

整数

在C语言中,整数就是没有小数部分的数。例如:2,-2,314都是整数。

浮点数

浮点数类似于实数。例如:3.00,0.22, 3.14E7 和 2e-8.

两种类型的区别

1.整数没有小数点部分,浮点数有小数点部分。
2.浮点数表示的范围通常比整数大。(浮点数通常占的位数会比整数多)
3.对于一些运算,浮点数会存在比整数更严重的精度丢失问题。
4.在实际情况中,浮点数表示的只是实际的近似值,并不是百分之百的精确值
5.过去,浮点数的运用会比整数运算慢,现在随着时代的进步,缩小了差距,几乎可以忽略不记。

关于几种基本数据类型的详细介绍

int类型

int类型是有符号整型,即int类型的值必须是整数,可以是正整数、负整数或0。其取值范围依计算机系统而异。早期是以16位来存储一个int值,如今int通常是32位。ISO(国际标准化组织) C规定int的取值范围最小为-32768~32767。C语言把大多数整形常量视为int类型,但是非常大的整数除外。

char类型

char类型用于存储字符(如,字母或标点符号),但从技术层面看,char是整数类型。因为char类型实际上储存的是整数而不是字符。计算机用数字编码来处理字符,即用特定的整数表示特定的字符。(例如常用的ASCII编码)

通常char类型被定义为8位的存储单元(足以容纳ASCII编码)。一般而言C语言会保证char类型足够大,以存储系统(实现C语言的系统)的基本字符集。

基于现在很多字符集都已经超过255,所以国际上也创建了很多新标准。

C语言把1字节定义为char类型占用的位(bit)数,因此不受操作系统位数的限制。

注意
使用char型时,单引号只能括住1个字符例如:
char a=‘A’;
而且中间不能含有中文等其他字符,例如下面的表示错误
‘aa’,‘12346’,‘枫’.

关于char有符号和无符号的问题
有些C编译器把char实现为有符号的类型,这意味着char可表示的范围是-128 ~ 127。而有些C编译器把char实现为无符号类型,那么可表示的范围是0 ~ 255

float类型和double类型

关于浮点数的计数法事例
数字科学计数法指数计数法
10001.0 X 1031.0e3
12301.23 X 1031.23e3
123.451.2345 X 1021.2345e2
0.00676.7 X 10-36.7e-3

float是单精度浮点型,double是双精度浮点型。double的精度比float高。
在C中为了区分float和double,float型数据需要以f结尾,例如
float a=1.23f;
float b=-2.1f;
float c=0.0f;
float d=1f,这里是需要注意的,只有小数才允许加上f,否则编译器会报错(具体类型是语法错误,错误的数字后缀)。

C标准规定,float必须至少是能表示6位有效数值,且取值范围至少是10-37~ 10+37。double和float类型的最小取值范围相同,但至少能表示10位有效数字,且一般情况下double占用64位而不是32位。

扩展:
通常系统储存一个浮点数要占用32位,其中8位用于表示指数的值和符号,剩下的用于表示非指数部分(也称为尾数或有效数字)

关于浮点数的上溢和下溢
上溢
当计算导致(或其他原因)数值过大,超过了当前类型所能表达的范围时,会发生上溢。在C语言中,对于这种情况,会用一个特定值表示无穷大。(整形常量若遇到超出表达范围是另外一种处理方法)
下溢
在浮点数的计算过程中, 损失了原末尾有效位上的数字,叫做下溢

特殊的浮点值:NaN(not a number)

其他关键字

short、unsigned和long

C语言提供这三个关键字主要用于修饰基本整数类型(其他类型也会用到其中的一些)

short int:可简写为short,占用的存储空间(位数,如int通常为32位)可能比int少。与int 类似,为有符号类型。

long int:可简写为long,适用于较大数的环境。与int 类似,为有符号类型。

long long int:可简写为long long(C99标准加入),占用的储存空间可能比long 多,适用于更大数值的场合。至少占64位,与int 类似,为有符号类型。

unsigned:表示无符号类型,书写形式例如:unsigned int ,unsigned long int等,只适用于非负值场合。该类型的表示范围与有符号类型的表示范围不同,能表示更大的整数
例如:
16位unsigned int表示的范围为0 ~ 65535,而16位int表示为 -32768 ~ 32767.

long double:C语言的第三种浮点类型,用来满足比double类型更高的精度要求。C只保证long double 类型至少与double类型相同,这点需要注意

_Bool

C99标准添加,用于表示布尔值,及逻辑上的true和false。C语言用非0值表示true,0表示false。但_Bool类型用值1表示true 值0表示false 。(在一定程度上反映了_Bool类型实际上也是一种整形)。布尔类型是无符号int类型,原则上只占用一位,所占用的空间只需能储存0或1即可。

_Complex和_Imaginary

出于科学和工程计算的原因,C99标准开始支持复数和虚数类型,但有所保留。一般而言,把虚数类型作为可选项。

C11则把复数软件包都作为可选项

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的平方根。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值