3 回答
TA贡献1797条经验 获得超6个赞
1、C语言的数据类型分类
C语言的数据类型分类:
基本数据类型:
整型int
字符型char
浮点型:
单精度浮点型float
双精度浮点型double
构造数据类型:
数组(如int a[])
结构体struct
联合体(或叫共用体)union
枚举类型enum
指针类型(如int *p)
空类型void
2、int,unsigned int,short,long
1)整型int:
大小:16位2字节 或 32位4字节(取决于编译器)
存储格式:0~30位是数据位,第31位是符号位,用0代表正数,1代表负数。负数用补码存储。
存储范围:-2^31 ~ 2^31-1
打印格式:%d(十进制)、%o(八进制)、%x或%X(十六进制)
说明:
int类型用于存放整数,占16或32位(取决于编译器),2或4字节。其中第31位为符号位(符号位0代表正数,1代表负数),后面几位为数据位
负数在内存中是以补码的形式存储的。
(补码:按位取反,末位+1)
(用补码存储,正0和负0相同)
(对一个整数求补码再求补码,等于自身)
有十进制,八进制,十六进制三种存储方法
八进制输入输出格式化使用%o。八进制数以0开头,如0666
十六进制输入输出格式化使用%x或%X。十六进制数以0x开头,如0x12345678
2)无符号整型unsigned int:
大小:同int型
存储格式:0~31位都是数据位,无符号位
存储范围:0 ~ 2^32-1
打印格式:%u
说明:
与int型基本相同,区别是int型的符号位不再是符号位而也作为数据位,因此无符号整型数据比整型数据存储范围大2倍,不过无法存储负数
适用于只有正数的情况
unsigned关键字不仅仅可以修饰int类型,还可修饰short long float等类型。
注意:unsigned关键字修饰的变量无法接收负数。
无符号数的输入输出格式控制是%u
3)短整型short:
大小:16位2字节
存储格式:0~14位为数据位,第15位为符号位,用0代表正数,1代表负数
存储范围:-32768 ~ 32767
打印格式:%h
说明:
short类型与int类型类似,只不过是16位,2字节。第15位为符号位,后面几位为数据位
short类型适用于存储不太大的数据,节省内存空间。
short类型的输入输出格式控制是%h
4)长整型long:
大小:32位4字节
存储格式:同32位int类型
存储范围:同32位int类型
打印格式:%ld
说明:
在过去的16位编译器中,int型是16位,所以long类型是32位。
不过在现代的32位编译器中,int型与long类型已无本质区别。
如果需要考虑程序跨平台移植(如16位编译器<--->32位编译器)需要谨慎选择使用int还是long
3、char类型:
大小:8位1字节
存储格式:0~6位都为数据位(128) 或 0~7位都为数据位(256,扩展后的ASCII表)
存储范围:0 ~ 255
打印格式:%c
说明:
----------------------------ASCII表与转义字符----------------------------------------
在计算机的编码中,字符是使用ASCII表进行编码的。每一个字符都有一个对应的数字,例如:
'A'--->65
'a'--->97
'0'--->48 等
除了常见的数字、字母、符号(如+-*/%等)外,ASCII表还存储了一些看不见的控制字符,如:
空或'\0'(字符串结束标志)--->0
空格--->32
任意的ASCII表内字符都可以用'\'+数字(八进制)的方式来表示,有些还可以用'\'+字符来表示,称之为转义字符。转义字符即在'\'后的字符不代表了它本来的含义。
常见的转义字符:
\a:蜂鸣器
\b:backspace退格键
\n:换行,光标移动至下行行首
\r:光标移动至本行行首
\f:换页
\t:tab水平制表符
\\:输出\
\':输出'
\":输出"
\?:输出?
\0:NULL字符串结束标志
----------------------------ASCII表与转义字符end-------------------------------------
4、float与double
----------------浮点数的存储-------------------------
浮点数分为float类型(32位)和double类型(64位)
其中一位是符号位,代表整个数的正负
一位是指数符,代表指数部分的正负
尾数表示0.XXXXXXX(浮点数的有效数字),但不存0和.
指数表示指数的有效数字
因此,尾数代表了浮点数的精度,指数代表了浮点数的范围
浮点数存储的小数不是实际值,只能是近似值(如1/3,只会存储0.333333)
----------------浮点数的存储end----------------------
1)float类型:
单精度浮点型
大小:32位4字节
存储格式:符号位(1位)+尾数(23位)+指数(8位,含1位符号位)
精度:小数部分最多有效7位,有效6位(2^23=8388608,所以是7位)
存储范围:-3.40E+38 ~ +3.40E+38(即-2^128 ~ 2^128)
打印格式:%f(十进制计数法),%e(指数计数法)
2)double类型:
双精度浮点型
大小:64位8字节
存储格式:符号位(1位)+尾数52(位)+指数(11位,含1位符号位)
精度:小数部分最多有效16位,有效15位(2^52=4503599627370496,所以是16位)
存储范围:-1.79E+308 ~ +1.79E+308(即-2^1024 ~ 2^1024)
打印格式:同float类型
注意:double类型是8字节而float类型是4字节,因此double型比float型的数据更加精确,但计算速度会更慢。
3)long double类型:
大小:96位12字节
存储格式:同double类型
精度:同double类型
存储范围:同double类型
打印格式:%lf,%le
TA贡献1872条经验 获得超3个赞
存储类型关键字有如下4个:
1 auto :声明自动变量。
此项为缺省值。auto int a;和int a;是完全相同的。所以在编程中一般看不到auto的使用。
2 extern:声明外部变量。
功能为扩展全局变量的作用域。
3 register:声明寄存器变量。
声明后,变量存储于CPU寄存器中。是最快的C语言变量。
但是需要注意的是,CPU寄存器有限的,所以并不是所有声明为register的变量都会存在寄存器中。使用register更像是一个申请,具体是否可以存在寄存器还要看系统情况。 该项尽量少用。
4 static :声明静态变量。
有静态局部变量和静态全局变量两种。用于局部变量时,将变量声明周期延长到整个程序运行。用于全局变量时,将全局变量作用域限定在本文件。
- 3 回答
- 0 关注
- 703 浏览
添加回答
举报