1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > IOT嵌入式物联网----C语言基本数据类型

IOT嵌入式物联网----C语言基本数据类型

时间:2020-10-07 07:21:04

相关推荐

IOT嵌入式物联网----C语言基本数据类型

系列文章目录

零 ---- 千里之行,始于足下

壹 ----嵌入式C语言编程

前言

在嵌入式的实际开发过程中我们更多的需要使用C语言进行编程,而在编程时我们需要处理各种类型的数据,C语言提供的数据类型到底有什么呢?又分别有什么不同呢?让我们通过这篇文章去了解吧。

一、数据类型有哪些?

C语言一共给我们提供了有如下几个数据类型:

二、整型

(一)各种整型类型名称以及所占用的字节空间

我们可以通过sizeof关键字来验证一下某个数据类型所占用的空间

printf("%d\n",sizeof(short));printf("%d\n",sizeof(int));printf("%d\n",sizeof(long));printf("%d\n",sizeof(long long));

↑↑↑由于我的编译器是32位的,所以long显示为4字节↑↑↑

(二)有符号和无符号数取值范围

这里简单提一下,数据类型的取值范围和该数据类型所占用的空间有关,一个字节等于8位,在未定义unsigned(无符号)时,默认将最高位用作符号标识位,0为正数、1为负数。

例如在有符号时,二进制1000 0001表示-1,而在无符号时则是表示129。因此,在我们使用整型时,如果知道该整型不可能是负数时(如:人的岁数),我们通常会将其定义为无符号类型,以达到减少敲代码时出错的概率或者扩大存储的最大数取值范围。

(三)整型数据的表示和打印格式

可以看到一开始我将所有的整型类型都按照“%d”的格式打印,其实对于每个不同的数据类型,都有其特定是打印格式。在给数据赋值时也是如此,每个数据类型赋值也有其特定的方式,如下表所示:

short _short = -32768;int _int = -2147483647;long _long = -2147483648l;long long _long_long = -9223372036854775807ll;unsigned short _ushort = 65535u;unsigned int _uint = 4294967295u;unsigned long _ulong = 4294967295ul;unsigned long long _ulonglong = 18446744073709551615ull;printf("short: %hd\n", _short);printf("int: %d\n", _int);printf("long: %ld\n", _long);printf("longlong: %lld\n", _long_long);printf("unsigned short: %hu\n", _ushort);printf("unsigned int: %u\n", _uint);printf("unsigned long: %lu\n", _ulong);printf("unsigned long long: %llu\n", _ulonglong);

三、字符型

字符型用来存储一个单一字符,用char作为类型表示符。每个字符变量占用一个字节,用单引号(‘ ’)将字符赋值,使用%c输出,如下所示:

char _char = 'A';char _ch = 65;printf("_char: %c\n", _char);printf("_ch: %c\n", _ch);

细心的同学可以发现,char类型也可以赋值整数,为什么呢?原来计算机只能识别0和1,并不能直接识别‘A’或者‘B’,但是在实际生活中,字符型的使用频率并不比整型少,那么怎么办呢?于是聪明的程序员将所有字符放到一个表里面,这个表被称为ASCII表,65就是表示字符'A',所以当 _ch 进行输出时,显示为‘A’。

(一)ASCII表

ASCII码大致由以下两部分组成:

----ASCII非打印控制字符:ASCII表上数字0-31分配给了控制字符,用于控制打印机等一些外围设备。

----ASCII打印字符:数字32-126分配给了能在键盘上找到的字符,当查看或打印文档时就会出现。数字127代表DEL命令。

四、浮点型

浮点型是专门用于存储小数的数据类型。在C语言中,浮点型分为单精度浮点型(float)双精度浮点型(double),两者的区别是双精度浮点型比单精度浮点型的精度更加高。float在计算机中存储占用4字节,32位,有效位数为7位(6位小数+小数点),而双精度(double)在计算机中存储占用8字节,64位,有效位数为16位(15位小数+小数点)。

(一)浮点型的表示和打印格式

单精度浮点型小数通常用f结尾表示,没有使用 f 结尾的小数通常表示双精度浮点型。在输出时,分别使用%f%lf表示。以下举例:

//传统的赋值方式float _float = 3.14f;double _double = 3.14;printf("_float = %f\n",_float);printf("_double = %lf\n",_double);//科学计数法赋值_float = 1.1e3f; //1.1*10^3 e可以写成为Eprintf("_float = %f\n",_float);_float = 1.2E-3f; //1.2*10^-3printf("_float = %f\n",_float);

(二)浮点型输出“保留m位小数”的表达方式

在日常生活当中,我们通常会接触到保留m位小数这样的例子,那么在实际输出中,我们可以通过%n.mf的方式去表达,%n.mf表示输出n个有效位(包含小数点本身的1位),其中小数点保留m位。

例如我们将3.1415926通过 %6.4f 的方式输出,则输出结果为3.1416。被舍弃的有效位将会被四舍五入。

(三)关于浮点型的误差

由于浮点型变量是由有限的存储单元组成的,因此只能提供有限的有效数字。在有效数字以外的数字将被舍去,这样可能会产生一些误差。我们大胆假设给float赋一个超过7位有效数字的值,并且通过查看float的小数点后八位会是样什么的结果。

float _float = 3.141592653589793f;printf("_float : %f\n", _float);printf("_float : %.8f\n", _float);

首先,当我们正常输出超过有效数据位的时候,数据会被截断,且进行四舍五入。当我们查看小数点后八位的时候,发现有效数据仍然有效,但超过有效数据会发生误差。因此,我们在给浮点型赋值的时候,必须要使用合理的精度,通常可以无脑使用double作为小数的数据类型。

思考

1、如何快速将字符的大写字母转换成小写字母? 例如: ’A‘—>'a'

2、如何快速将整型转换成字符型? 例如:8—>'8'

3、已知浮点型有误差,那么要如何比较浮点型之间是否相等呢?

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。