답변:
많은 Arduino에 사용되는 ATmega328은 8 비트 마이크로 컨트롤러입니다. 이는 레지스터가 8 비트이고 데이터 버스가 8 비트이며 포트가 8 비트임을 의미합니다. 시스템에는 약간의 16 비트 측면 (예 : 타이머 중 하나)이 있지만 거의 모든 것이 8 비트입니다.
따라서 대부분의 작업은 한 번에 8 비트를 처리합니다. 8 비트 (예 : 16 비트 또는 32 비트 정수 및 부동 소수점 숫자)를 제외한 모든 작업을 수행하려면 소프트웨어 에뮬레이션으로 설명 할 수있는 것이 필요합니다. 여기서 컴파일러는 이러한 큰 변수에 대해 여러 명령을 사용합니다.
8 비트는 8 비트 포트를 처리하는 데 적합합니다. 또한 많은 루프 카운터, 반환 값 및 ASCII 문자를 처리하기에 충분합니다. 숫자를 다룰 때는 충분하지 않습니다. 부호있는 8 비트 int (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/ko/Reference/int
C 및 C ++ 언어에 대한 중요한 사실 중 하나는 해당 표준이 정수 및 부동 소수점 숫자 유형의 크기 (바이트)를 정의하지 않는다는 것입니다.
그들은 단지 최소 범위와 이러한 범위 사이의 관계를 정의합니다.
range(short) <= range(int) < range(long)
따라서 예를 들어 int
의지 의 크기 는 일반적으로 다음에 달려 있습니다.
sizeof(short) == sizeof(int) == sizeof(long)
은 가능 하다고 말하는가 ?
sizeof(short) < sizeof(long)
있습니다.
int
아두 이노 때문에 4 바이트입니다. Ashort
는 기존의 모든 Ardunios에서 2 바이트이지만, 다른 사람들의 조언int16_t
이나 사용을 강조합니다uint16_t
.