留言与评论(共有 0 条评论) |
发布时间:2020-04-15 16:10:32
很多的应用场景都使用C语言,作为一名从事单片机C语言编程的工程师,和大家分析下这个基础知识点的大学问。
在单片机编程中,基本上常用的都是,unsigned char,unsigned int、unsigned long这三种类型,变量的定义不同的类型,就决定了位宽,也就决定了变量的数据范围。
char 类型,是8位有符号数据类型,范围是-128~127。
unsigned char 类型,是8位无符号的数据类型,范围是0-255,总共256个数字。
int 类型, 16位有符号数据类型。范围是-32768~32767。
unsigned int类型,是16位无符号数据类型,范围是0-65535,总共65536个数字
unsigned long,是32位的数据,范围是0-2^32。
在单片机编程时候,需要根据设定变量的需求,选择定义合适的变量类型。比如你想用的变量是超过255,就必须用unsigned int 类型。否则会出现异常。
在不同的单片机平台当中,unsigned char,unsigned int,unsigned long 代表的位宽会存在差异。这个与芯片的开发环境有关系.。比如在合泰单片机的开发环境,unsigned int 类型是与unsigned char 是一样的。都是8位宽度。 在windows 环境下开发,int类型就是32位宽度。所以需要具体平台具体分析。
变量的类型,是单片机C语言开发的基础,如果不掌握,有可能设计出来的代码和想象中的不一样。
虽然这是一个很简单的技术基础,但很容易被单片机初学者,或者C语言编程初学者遗漏的知识点。在程序BUG调试当中,对于初学者来说,也是经常遇到,希望大家都记住。
我是科技电小二,一名单片机开发工程师,如果您觉得这篇文章对您有所帮助,那么点个赞,并加个关注吧。
C语言的类型只是决定其编码规则和某些运算法则,虽然号称强类型语言,但实际上对类型的控制并不强,因与底层汇编接近,C语言允许无视类型声明强行转换数据类型,尤其是使用指针的时候,更可以随便变换数据类型而不发出警告。实际上,许多解释性弱类型语言本身就是用C写成的,这种随意变换数据类型的手段即是C提供。
C语言关于数据类型的使用,除了内置的几种基本数据类型,还可以自行定义新的组合结构类型,这才是该语言最有用的功能,为其他语言继承和发扬。
不要被unsigned之类的声明符欺骗,对C语言来说,声明了这样的类型,实际上你也会遇到被视为signed的运算,在诸如左移右移这样操作的时候,类型声明不制约运算,结果可能是非预期的。
像char这样的数据类型,C语言实际上视为与short一样的整数处理,这就是它可以字符与整数混用的原因,也是数据类型并不实质决定什么的原因。後期的高级语言,对类型的限制严格得多。
决定的是两个东西:一个是数据长度,一个是操作指令。
比如int类型和unsigned int类型
编译后的位移指令不同,指的是右移是否保留最高位等约定。
再说int和float四则运算在编译后,虽然都用32位寄存器,但浮点运算指令和整数运算指令完全不同。
其他,short,int,longlong 之间的区别就不用说了。
其实,10多年前爱改游戏内存参数的玩家非常明白这些类型在内存中的存储和组织。
首先要说明的是C语言是强类型语言,什么意思呢?就是所有变量都必须明确声明其所属类型。一旦一个变量的类型确定了,那该变量在其整个生命周期内所占的内存大小及可对其实施的操作就确定了。这一切都是通过编译程序编译时就确定和实现的。
变量类型决定了数据的存储形式,和数据能进行的运算。
大家都说了占用的内存空间,更进一步,数据类型还决定了可对其进行的操作,如:
int t=0;
t++; // ok
float x=0;
x++;// error
-----------河南新华
需要多少存储单元,值如何解释。
类型其实就是占用内存大小的一个别名,不同类型占用的大小不一样
变量类型决定所需的存储空间大小
大家都说了占用的内存空间,更进一步,数据类型还决定了可对其进行的操作,如:
int t=0;
t++; // ok
float x=0;
x++;// error
决定了内存 char类型8位内存 int类型32位内存
留言与评论(共有 0 条评论) |
全站搜索