C语言基本的数据类型

嵌入式技术

1372人已加入

描述

 

1、介绍数据

在定义变量时需要指定变量的类型。常量也是区分类型的。因为数据都是存放在内存中的单元中的,它 是具体存在的,而存储单元是有限制大小字节的,每一个存储单元存放数据的范围是有限的。所以必须对数据分配储存单元的安排,包括储存单元的长度(占用字节数)以及数据存储的形式,不同类型的存储。也是为了方便编程人员对数据进行操作,不然一堆数据放下来,都不知道哪个是哪个,这样分类了之后大大提升了编程效率。

字符串

2、 整型类型

基本整型  int :

编译系统一般会分配2个或4个字节(具体是看编译环境),1个字节(8个二进位),整数是以补码的形式存放在储存单元中的。如 5: 二进制是101;如果用两个字节存放 正数的补码和源码都是:0000 0000  0000 0101

负5则是要先求出源码,然后再按位取反,再加1  才是负数的补码  如

(源码)0000  0000  0000  0101

(按位取反)1111 1111 1111 1010      (负数补码)1111 1111 1111 1011

再存放整数的存储单元中,最左边(首位)一位是用来表示符号的,0表示正数,1表示负数

现在的编译环境一般都是分配的是4个字节(32位),范围是-2^31到2^31-1  即 -214 748 3648到-214 748 3647

短整型 short int :

短整型一般都是分配两个字节存储方式与int相同,系统一般是分配2个字节(16位),数值能表示的范围是-32768-32767(比int少)

长整型 long int :

系统会分配4个字节(32位),那么长整型所能表示的数字范围就是-2^63----2^63-1了。与int不相同的是int 至少有2个字节以上,long至少有4个字节以上,并且sizeof(int )<=sizeof(long int)。

有些编译环境的int只是两个字节而已

双长整型 long long int:

系统会分配8个字节(64位),那么长整型所能表示的数字范围就是-2^63----2^63-1了。(比长整型长得多)

注*  当然上面所说的 在64位系统下,而且还是要看具体的编译环境,如果在32位的机子或者比较古老编译环境的上面,数值能表示情况和分配字节会会有所不同。

unsigned(无符号类型)

在整数中,有 有符号和无符号之称,一般默认都是有符号的,在变量定义前加上,unsigned 关键字 ,就可将整型数据转换为无符号类型数据,也就是数学中的绝对值数字。一般默认初始化都是有符号的。

实型数据不能加signed(有符号)或unsiged(无符号)修饰符。

由于无符号数据最高位不再用来表示符号,而用来表示数字,所以无符号的存储会比有符号的存储范围扩大一倍。即65535位。如-1在两字节中存放的补码形式是 1111 1111 1111 1111  最开始的一位数字就表示的符号位 ,数值就只有2^15位。但是如果它加上unsigned无符号,那么第一位将不再代表符号,所以数值也就相应增加到2^16位了。

字符型 char:

字符数据在内存中的储存是:每个字符变量被分配一个字节的空间,所以一个单引号只能放一个字符,字符值是以ASCII码形式存放在存储单元中的。字符可以是任意的字符,但数字被定义成字符后就不能参与数值运算了 如 ‘ 5 ‘ 和5是不同的,’ 5 ‘是字符常量,它只是表示一个形状位‘5’的符号,在需要时按原样输出而已,并不是以数值存放的,所以不能参与运算。

char是int的一种特殊形式。在一般时候,也可以定义位char类型的变量来像int的变量一样操作。

可以将0-127的整数赋值给一个字符变量。如果将负数赋值下去,由于字符型只能读取一个字符,所以前面的符号将不会被读取。

定义字符变量,实际上是定义一个字节的整型变量,它只不过是用来存放字符而已,

 

char a = '-6';char b = a;printf("%c", b);//结果是输出6

 

signed  char(有符号) 能表示的数值范围是-2^7到2^7-1  即-128-127

unsigned char (无符号)能表示的数值范围 是2^8-1 即 0-255

(还有一种字符串形式数据类型,后面会详细介绍)

布尔型 bool:

在使用次类型前需要添加预处理头文件命令#include,然后才可以定义定义次变量 如bool a;布尔型的值只有两个:false(假)和true(真)。false的值为0,true的值是1(或者是非0的值都是),bool只占用一个字节。

_BOOL长度视实际环境来定,一般可认为是4个字节。(这个是不用头文件可以定义的)但是类型值只有0和1这两个值。

3、浮点型(实数型)

在C语言中,实数是以指数形式存放在内存中的,一个小数表示为指数的形式有很多,如3.14159,可以表示为 0.0314159*10^2或314.159*10^-2 等等。

由于它小数点的位置可以移动,所以叫它浮点数。所有的浮点数类型的数值以二进制指数形式存放在内存中,在储存中,系统将小数部分和指数部分分别存放。

存储分为三部分:符号位,小数位,指数位是以2幂次来表示的。存储方式都是用科学计数法来存储数据的 如:133.5(在内存中)符号位(0为正)阶码(指数位)尾数(小数点后的数)

135.5单精度的浮点数,先转整数135转换成二进制为1000 0101,然后再转小数的5转换为0.1,则135.5二进制为1000 0101.1。

这个表示尾数  然后首先要用科学计数法的形式表示出来,1000 0101.1科学计数法就是1.0000 1011*2^7

这里的阶码用移码来表示,float的偏移量为127.阶码位是8位,那么这里的阶码就是127+7=134;将134转为二进制是1000 0110;

由于规定小数点前面都为1,因此在计算机中,将不会存储小数点前面的1,这里的尾数就为00001011。其后全部补0,将其补充够23位数。这里是正数,所以符号位为0

因此数字在内存中存储为:0100 0011 0000 0101 1000 0000 0000 0000(四个字节)

**由于用二进制表示一个浮点数对于存储单元来说长度是有限的,因此不能得到完全精准的值,只能保持有限的精确度。小数部分占的位数越多。有效数字越多,指数部分占的位数越多,则能表示的数值范围越大。

**偏移量:是指浮点数表示法中的 指数域 的 编码值 为指数的 实际值 加上某个固定的值,用IEEE 754 国际标准规定该 固定值 为 2 的 (e−1)次方减 1 其中的e 为 存储指数的单位元 的长度 (即有几个 bit) (就是看一个浮点类型能表示指数部分最大范围)

单精度浮点型 float :

单精度浮点型字节数为4个字节,有效数字6-7个,小数长度23位(24的话是包括符号位)。指数域是8位单位元,固定偏移值是2 的 (7)次方减 1, 就是 2的七次方减1,等于 127

(取值范围见图)

双精度浮点型 double:

双精度浮点型存储字节数为8个字节,有效数字达到15个,小数长度52位(53的话是包括符号位)指数域是11个单位元。固定偏移值是2 的 (10)次方减 1, 就是 2的十次方减1,等于 1023

(取值范围见图)

长精度浮点型 long double :

不同的编译器对于long double 所给的数据都不一样,一般来说都是分配16个字节,有效数字达到19个。(其他详情未知)

取值范围表:

字符串

IEEE 754 国际标准:

字符串

字符串

  审核编辑:汤梓红

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分