嵌入式学习3——C数据类型总结

1. 逻辑类型:bool(需要头文件<stdbool.h>)“非零即为真其值为1,零为假其值为0“。

2. (32位系统)整型数据按照字节大小分为下列几类:
 (1)char:1字节
 (2)short:2字节
 (3)int :4个字节(16位操作系统 2个字节)
 (4)long:4个字节(64位操作系统 8个字节)
     另外还需要区分有符号数和无符号数:无符号数(unsigned),其8个bit位都是数据位,取值范围是0~255。而有符号数(signed)最高位是数据位(0为正数,1为负数),取值范围是-128~127。
    *在数据越界的情况下,系统不会自动报错,但是却不能够得出应该有的结果。
 比如:signed char类型数据达到129会越界,写出二进制形式详细讨论下:
129:
 原码 1000 0001
 反码 1000 0001
 补码 1000 0001
     当计算机对数据进行存储时,默认当做有符号数进行处理,所以将最高位看做符号位。
     于是该补码就变成一个负数的补码,反推回输入得到
 补码 1000 0001
 反码 1000 0000
 原码 1111 1111  (-127)
     最终输出得到-127,是一个越界的数据。而所谓的-128,只是强调一个临界值(数据位和符号位重合),和所谓的-0(补码:1 000 0000)类似,不同的编译器对边际的操作不同,切记不可越界。

3. 浮点型:(vim编译器默认显示6位精度)
float (单精度浮点型)  精度:6
double(双精度浮点型) 精度:16  

4. char:字符型


5. 常量:在程序的运行中不可以改变的量
(1)整型常量:二进制常量(0b),八进制常量(0),十进制常量,十六进制常量(0x)。
(2)浮点型常量:123.123;科学计数法:1.23*10^2;指数形式:1.23e+2
(3)字符型常量:用单引号 ''引出来的。
(4)字符串常量:用双引号" "印出来的,并且末尾总有'\0'字符作为结尾。 
 
6. 变量:程序运行时可以发生改变的量,对于变量的定义都遵循
    存储类型 数据类型 变量名
    的方式定义,变量有两种:
(1)全局变量:main{}外的变量
(2)局部变量:main{}内的变量(若同时存在全局变量和局部变量对同一个变量的赋值,以局部变量的赋值为准)
 
7. 存储类型:
(1)auto:修饰局部变量,如果局部变量前没有存储类型,默认为auto类型。
(2)register(寄存器类型):把修饰的变量放到寄存器中,提高运行效率,如果寄存器满了,默认回到auto类型。
(3)extern(外部引用类型): 引用同一工程中的全局变量。
    存储类型在定义的时候会在内存上分配空间,而存储类型的声明只是告诉编译器该变量存在有空间,但并不是在声明出开辟空间,注意区分。
    最后介绍一下static的三个作用:
1.全局变量  限制变量的作用域,只能在本文中使用。
2.函数      限制函数的作用域,只能在本文中使用。
3.局部变量  改变局部变量的存放位置,延长局部变量的生命周期,运算的结果保留上一次的结果。
 以上。
*附:数据类型的隐式转换(计算机自动执行的转换,在平时可能注意不到):
1.赋值:如果赋值符号左右两边类型不一致,进制赋值时会出现
 (1)浮点型数据赋值给整型数据会精度丢失
 (2)大的数据类型赋值给小的数据类型,可能造成越界
2.算术: 如果运算时运算式中数据类型不一致,默认向最大的数据类型转换。
 double <- float <- long <- int <- short <- char (32位操作系统)
3.有无符号: 有符号数和无符号数运算,默认转化为无符号数进行运算。
4.printf:显示转换:(多用于指针类型转换)
格式:(要转换的数据类型) 需要被转换的目标
注意:  (1)大类型转向小类型,考虑是否越界。
            (2)浮点数向整型转换会精度丢失。
            (3)本质:只是显示结果发生改变,本质还是原来的数。

猜你喜欢

转载自blog.csdn.net/AQUARICES/article/details/79964534