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个。
-
数据
+关注
关注
8文章
7017浏览量
89008 -
存储
+关注
关注
13文章
4310浏览量
85835 -
内存
+关注
关注
8文章
3024浏览量
74034 -
编译
+关注
关注
0文章
657浏览量
32868
原文标题:C语言知识总结二:基本的数据的表现形式与运算
文章出处:【微信号:C语言学习联盟,微信公众号:C语言学习联盟】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论