Arduino.ru
Очень часто встречаю в примерах скетчей следующие строки:
Пытался разобраться самостоятельно что-то и с чем это едят. но не смог, подскажите что это . или посоветуйте чтиво какое .
- Войдите на сайт для отправки комментариев
Вроде бы так — uint8_t — тип целого числа без знака длиной 8 бит т.е. все равно, что байт — byte, а uint32_t — тип целого числа без знака длиной 32 бит т.е. все равно, что 4 байта — unsigned long .
- Войдите на сайт для отправки комментариев
В интернете я прочел тоже самое, но все равно не понимаю . а в каких случаях его необходимо приминять?
Где то на просторах нашел информацию, что если объявлен uint8_t, то в ОЗУ выделяется 1 байт. все верно?
- Войдите на сайт для отправки комментариев
Ага верно, но байт это 2^8=256 а если значение составляет 65536 или более?
- Войдите на сайт для отправки комментариев
да, то же самое происходит, когда объявляете byte
- Войдите на сайт для отправки комментариев
Если в коде критично важна разрядность целочисельных типов даных то вместо int, char, short и т.д лучше использовать такое определение.
int8_t, int_16, int_32, int_64 — как выше сказано 8,16,32,64 длина, могут принимать минус и плюс, приставка u (uint_8) — тоже только с плюсом.
Вообще «хорошым тоном» написания кода считаеться использование именно таких определений, а связано ето с возможной несовместимостю различных компиляторов и соответственно переноса програмного кода.
Из своего опыта: проблем в использовании одного и другого замечено не было.
Типы данных в Arduino IDE и их вес (размер) в байтах.
Arduino IDE — это интегрированная среда разработки (IDE), которая используется для программирования микроконтроллеров Arduino. В Arduino IDE используются различные типы данных, которые определяют, какой тип информации можно хранить и обрабатываеть микроконтроллером.
Типы данных и их вес (размер) в байтах:
- int:
- Описание: Тип данных int (integer) представляет целые числа со знаком.
- Размер: 2 байта (от -32,768 до 32,767).
- unsigned int:
- Описание: Тип данных unsigned int представляет целые числа без знака.
- Размер: 2 байта (от 0 до 65,535).
- long:
- Описание: Тип данных long представляет длинные целые числа со знаком.
- Размер: 4 байта (от -2,147,483,648 до 2,147,483,647).
- unsigned long:
- Описание: Тип данных unsigned long представляет длинные целые числа без знака.
- Размер: 4 байта (от 0 до 4,294,967,295).
- float:
- Описание: Тип данных float представляет числа с плавающей точкой одинарной точности.
- Размер: 4 байта (от -3.4028235E+38 до 3.4028235E+38).
- double:
- Описание: Тип данных double представляет числа с плавающей точкой двойной точности.
- Размер: 8 байт (от -1.7976931348623157E+308 до 1.7976931348623157E+308).
- uint8_t:
- Описание: Тип данных uint8_t представляет беззнаковые целые числа размером 8 бит (1 байт).
- Размер: 1 байт (от 0 до 255).
- int8_t:
- Описание: Тип данных int8_t представляет целые числа со знаком размером 8 бит (1 байт).
- Размер: 1 байт (от -128 до 127).
- uint16_t:
- Описание: Тип данных uint16_t представляет беззнаковые целые числа размером 16 бит (2 байта).
- Размер: 2 байта (от 0 до 65,535).
- int16_t:
- Описание: Тип данных int16_t представляет целые числа со знаком размером 16 бит (2 байта).
- Размер: 2 байта (от -32,768 до 32,767).
- uint32_t:
- Описание: Тип данных uint32_t представляет беззнаковые целые числа размером 32 бита (4 байта).
- Размер: 4 байта (от 0 до 4,294,967,295).
- int32_t:
- Описание: Тип данных int32_t представляет целые числа со знаком размером 32 бита (4 байта).
- Размер: 4 байта (от -2,147,483,648 до 2,147,483,647).
- uint64_t:
- Описание: Тип данных uint64_t представляет беззнаковые целые числа размером 64 бита (8 байт).
- Размер: 8 байт (от 0 до 18,446,744,073,709,551,615).
- int64_t:
- Описание: Тип данных int64_t представляет целые числа со знаком размером 64 бита (8 байт).
- Размер: 8 байт (от -9,223,372,036,854,775,808 до 9,223,372,036,854,775,807).
- boolean:
- Описание: Тип данных boolean представляет логические значения true (истина) или false (ложь).
- Размер: 1 байт (обычно хранит 0 для false и 1 для true, но фактически использует только 1 бит).
- char:
- Описание: Тип данных char представляет одиночные символы или небольшие целые числа (хранит ASCII-код символа).
- Размер: 1 байт (от -128 до 127 или от 0 до 255, в зависимости от использования со знаком или без).
- byte:
- Описание: Тип данных byte представляет беззнаковые целые числа размером 8 бит (1 байт).
- Размер: 1 байт (от 0 до 255).
Пример кода:

Типы данных.
| Тип данных | Вес (размер) в байтах | Диапазон значений |
|---|---|---|
| int | 2 | -32,768 до 32,767 |
| unsigned int | 2 | 0 до 65,535 |
| long | 4 | -2,147,483,648 до 2,147,483,647 |
| unsigned long | 4 | 0 до 4,294,967,295 |
| float | 4 | -3.4028235E+38 до 3.4028235E+38 |
| double | 8 | -1.7976931348623157E+308 до 1.7976931348623157E+308 |
| uint8_t | 1 | 0 до 255 |
| int8_t | 1 | -128 до 127 |
| uint16_t | 2 | 0 до 65,535 |
| int16_t | 2 | -32,768 до 32,767 |
| uint32_t | 4 | 0 до 4,294,967,295 |
| int32_t | 4 | -2,147,483,648 до 2,147,483,647 |
| uint64_t | 8 | 0 до 18,446,744,073,709,551,615 |
| int64_t | 8 | -9,223,372,036,854,775,808 до 9,223,372,036,854,775,807 |
| boolean | 1 | true (истина) или false (ложь) |
| char | 1 | -128 до 127 или 0 до 255 |
| byte | 1 | 0 до 255 |
Примечание:
Размеры типов данных, как указано выше, верны для микроконтроллеров AVR (например, Arduino Uno) и многих других платформ на базе AVR. Если вы используете Arduino на базе других микроконтроллеров (например, ARM) или другой версии Arduino IDE, размеры типов данных могут отличаться.
Заключение:
Используя различные типы данных в Arduino IDE, вы можете эффективно управлять памятью и работать с различными типами информации на микроконтроллере Arduino. Знание размеров типов данных поможет вам избежать ненужных переполнений памяти и эффективно использовать ограниченные ресурсы устройства.
Понравилась статья Типы данных в Arduino IDE и их вес (размер) в байтах? Не забудь поделиться с друзьями в соц. сетях.
А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.
int VS uint8_t VS uint16_t
This question is quite clear. What are the differences between an int , an uint8_t , and an uint16_t . I know it has to do with bytes and memory but can someone clarify me a bit?
Things I want to know:
1- How much memory does each take.
2- When to use what.
3- In the end of the day, are they that different?
1 Answer 1
You can decipher most of them yourself.
- A u prefix means unsigned .
- The number is the number of bits used. There’s 8 bits to the byte.
- The _t means it’s a typedef .
So a uint8_t is an unsigned 8 bit value, so it takes 1 byte. A uint16_t is an unsigned 16 bit value, so it takes 2 bytes (16/8 = 2)
The only fuzzy one is int . That is «a signed integer value at the native size for the compiler». On an 8-bit system like the ATMega chips that is 16 bits, so 2 bytes. On 32-bit systems, like the ARM based Due, it’s 32 bits, so 4 bytes. Of the three it is the only one that changes.
Personally I rarely use int and always use uint8_t etc., since the variable type is the same no matter what architecture you compile for. When you use int you can run into problems if you had a program that worked fine on a 32-bit ARM but then doesn’t work right on an 8-bit ATMega, since the int can only store a fraction of the range of numbers on the 8-bit system compared to the 32-bit system.
What is the «_t» in «uint8_t»
The Arduino language contains several easily recognizable variables, like «bool», «byte», «int» and «char». But, below the surface, the Arduino language is really a subset of the C language that works on microcontrollers. With it, you will find many specialized data types designed to ensure compatibility across devices that don’t always treat a byte the same way.

If you have looked at more advanced Arduino code, perhaps looking at Arduino sources on Github, you may have noticed that a lot of variable types end with «_t».
You probably already know that the Arduino «language» is based on the C language. I am not exaggerating when I say that our modern civilization depends on C and its object-oriented cousin, C++. No matter what gadget (computer, tablet, phone) you are reading this on, your electronic device functionality infrastructure is written in C and C++.
Because C and C++ is used on so many different platforms, from microcontrollers to supercomputers, there was a need for types (like integers, floats, etc.) that are compatible across all these platforms.
So, in the C99 standard (the ISO standard for the C language), types that are designed to be cross-platform compatible are marked with a «_t». «t» stands for «type.»
This way, the programmers know that the uint8_t is a byte with 8 bits no matter which platform the program runs on.
If you strive to write code that can be executed on different computer or microcontroller systems, then it is good practice to use data types with the «_t» extension for this reason.
For the Arduino, we tend not to use C99 cross-platform compatible types because most often our code is not meant to run on other systems.
