Answers:
许多Arduino中使用的ATmega328是8位微控制器。这意味着寄存器是8位,数据总线是8位,端口是8位。系统有一些最小的16位方面(例如,计时器之一),但几乎所有内容都是8位。
因此,大多数操作一次处理8位。在除8位(即16位或32位整数和浮点数)以外的任何东西上工作都需要本质上可以描述为软件仿真的东西,其中编译器使用多个指令来处理这些较大的变量。
8位显然足以寻址8位端口。它也足以处理许多循环计数器,返回值和ASCII字符。但是,在处理数字时,这还远远不够。带符号的8位整数(int8_t)仅表示-128-> +127。无符号(uint8_t)只能表示0-> 255。
8位整数是非常有限的。C / C ++ int必须至少表示-32,678-> +32,767,因此映射到int16_t-这样做的最小大小。这样可以很好地平衡范围和效率。当初学者正在学习时,这一点尤其重要-溢出并不是非程序员真正理解的东西。
但是,这样做会对性能产生影响,因为大多数16位操作所花费的时间至少是8位操作的两倍,并且使用的寄存器数量是其两倍。这可能对您没有影响。
我们中的许多人都切换到本机类型,例如int8_t和uint8_t,因为它可以为您提供更多控制权。
int
是32位的!arduino.cc/en/Reference/int
关于C和C ++语言的一个重要事实是,它们各自的标准未定义整数和浮点数类型的大小(以字节为单位)。
他们只是定义最小范围和这些范围之间的关系,例如
range(short) <= range(int) < range(long)
因此,例如的大小int
通常取决于:
sizeof(short) == sizeof(int) == sizeof(long)
可能吗?
sizeof(short) < sizeof(long)
。
int
是Arduino Due上的4个字节。short
所有现有Ardunios上的A 将为2字节,但我强调其他人建议使用int16_t
或uint16_t
。