关于单片机中变量的位数

发布于 2014-12-18  1.54k 次阅读


大家都使用过单片机,但是对于单片机定义的变量的长度,其表示范围应该还没有太深入的研究。尽日看到百度知道上关于些的一个问题,整理了一下热心回复者的内容。在此小结一下:

int

int型要看CPU位宽是多少来定的,所以,对于8位51、STM8、Atmel 8位单片机而言,其int是8位的,而对于MSP430、MC9SXS128而言是16位的。对于STM32、K60而言是32位的。其表示的范围自然也就差距很大。所以对于不同位宽的MCU间程序的移植也要考虑到这一点。

 

unsigned char

unsigned char亦与单片机有关,一般是8位的(我只见过8位的)。51单片机unsigned char是8位,而凌阳61系列的单片机,unsigned char是16位的。

 

unsigned int

51单片机unsigned int 是16位,而凌阳61系列的单片机,unsinged int是32位的。

 

int

你编译器在交叉编译的时候要指定目标板,int一般依赖于操作系统的字长,在裸机程序中,int依赖于你编译器给指定的长度,32bit的arm单片机 中,int就是可以被指定为32bit的,这个长度来源有两个,一个是必须你硬件要支持,也就是你一次处理的数据能达到32bit,另一个是你编译器所规 定的长度,当然,交叉编译的时候,这两者往往是对应的,所以目前主流编译器针对32bitarm的话都会是32bit。

 

规定

另外也有一些硬性规定,比如说short int 至少16bit,long int至少为32bit。

 

其中我们可以看出的是int是与CPU的位宽有关系的,而其余的类型倒是关系不能特别直接。还有就是变量的位数并不是受控于CPU的位数的,就算是8位的单片机也可以定义64位的变量(unsigned long long int)。

 

----------------当然,这还不是很全,剩余的类型就等作者以后遇到了再进行补充吧。----------------

2015-4-15更新:在IAR for MSP430 5.30版本中,测试MSP430是支持unsigned long long int的,也就是64位。


公交车司机终于在众人的指责中将座位让给了老太太