Замечание по использованию типа int — КиберПедия 

Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначен­ные для поддерживания проводов на необходимой высоте над землей, водой...

История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...

Замечание по использованию типа int

2022-11-24 23
Замечание по использованию типа int 0.00 из 5.00 0 оценок
Заказать работу

Когда переменная типа int в следствие арифметической операции достигает своего максимального значения, она "перескакивает" на самое минимальное значение и наоборот:

int x

x = -32,768;

x = x - 1; // x теперь равно 32,767 - перескакивает на минимальное значение
x = 32,767;

x = x + 1; // x теперь равно -32,768

Unsigned int

Описание типа

Тип данных unsigned int - беззнаковое целое число, также как и тип int (знаковое) занимает в памяти 2 байта. Но в отличие от int, тип unsigned int может хранить только положительные целые числа в диапазоне от 0 до 65535 (2^16)-1).

Отличие кроется в том как unsigned int использует старший бит, иногда называемый знаковый бит. Если старший бит равен 1, то для типа int компилятор Arduino считает, что это число отрицательное, а остальные 15 bit несут информацию о модуле целого числа в дополнительного кода представления числа, в то время как unsigned int использует все 16 бит для хранения модуля числа.

Пример

unsigned int ledPin = 13;

Синтаксис

unsigned int var = val;
  • var - имя переменной
  • val - присваиваемое значение

Замечание по использованию типа unsigned int

Когда переменная типа int в следствие арифметической операции достигает своего максимального значения, она "перескакивает" на самое минимальное значение и наоборот:

Unsigned int x

x = 0;

x = x - 1; // x теперь равна 65535

x = x + 1; // x теперь 0

Word

Описание типа

Тип данных word хранит 16-битное, не содержащее знака, число от 0 до 65535. Тоже самое, что unsigned int — (беззнаковое целое число).

Пример

word w = 10000;

Long

Описание типа

Тип данных long используется для хранения целых чисел в расширенном диапазоне от -2,147,483,648 до 2,147,483,647. long занимает 4 байта в памяти.

Пример

long speedOfLight = 186000L; // См. значение постфикса 'L' в теме Целочислесленные константы

Синтаксис

long var = val;
  • var - имя переменной
  • val - присваиваемое значение

Unsigned long

Описание типа

Unsignedlong используется для хранения положительных целых чисел в диапазоне от 0 до 4,294,967,295 (2^32 - 1)изанимает 32 бита (4 байта) в памяти.

Пример

unsigned long time;

Void setup()

{ Serial.begin(9600); }  
void loop()
{ Serial.print("Time: ");
time = millis();

//выводит время, прошедшее с момента начала выполнения программы

Serial.println(time);

// ожидаем (делаем пауза) 1 секунду

delay(1000);

}

Синтаксис

unsigned long var = val;
  • var - имя переменной
  • val - присваиваемое значение

Float

Описание типа

Тип данных float служит для хранения чисел с плавающей запятой. Этот тип часто используется для операций с данными, считываемыми с аналоговых входов. Диапазон значений — от -3.4028235E+38 до 3.4028235E+38. Переменная типа float занимает 32 бита (4 байта) в памяти.

Тип float имеет точность 6-7 знаков, имеются ввиду все знаки, а не только мантисса. Обычно для увеличения точности используют другой тип - double, но на платформе Arduino, double и float имеют одинаковую точность.

Хранение в памяти чисел с плавающей точкой в двоичной системе обуславливает потерю точности. Так, например, 6.0 / 3.0 не обязательно равен 2.0. Сравнивая два числа с плавающей точкой следует проверять не точное равенство, а разницу между этими числами, меньше ли она некого выбранной малого порога.

Следует также учитывать, что арифметические операции над числами с плавающей запятой выполняются существенно медленнее, чем над целыми.

Пример

floatmyfloat;

floatsensorCalbrate = 1.117;

Синтаксис

floatvar = val;
  • var - имя переменной
  • val - присваиваемое значение

Пример использования в коде

 

intx;
inty;
floatz;
x = 1;

y = x / 2; // y теперь равен 0, тип int не может хранить дробные числа

z = (float)x / 2.0; // z равна.5 (следует использовать 2.0, а не 2)

Double

Описание типа данных

Тип данных double, в отличие от большинства языков программирования, имеет ту же точность, что и тип float и занимает также 4 байта памяти.

Тип double поддерживается в Arduino для совместимости кода с другими платформами.

String - текстовые строки

Описание

Текстовые строки в Ардуино объявляются как массив (array) типа char (символов - литер), оканчивающийся символом "конца строки".

Синтаксис

Ниже приведены варианты объявления и присвоения строк:

charStr1[15];

charStr2[8] = {'a', 'r', 'd', 'u', 'i', 'n', 'o'};

 

charStr3[8] = {'a', 'r', 'd', 'u', 'i', 'n', 'o', '\0'};

charStr4[ ] = "arduino";

 

charStr5[8] = "arduino";

charStr6[15] = "arduino";

Возможны следующие варианты объявления текстовых строк:

  • Объявить массив символов без присваивания значений — Str1
  • Объявить массив символов и присвоить значения всем элементам, кроме последнего, компилятор Arduino автоматически добавит символ конца строки, как в Str2
  • Явно объявить завершающий символ, как в Str3
  • Инициализировать массив строковой константой в двойных кавычках. Компилятор автоматически задаст требуемый размер на массив, равный количеству символов плюс завершающий символ, как в варианте Str4
  • Инициализировать массив с явным заданием размера и присвоением строковой константы, строка Str5
  • Инициализировать массив с явным заданием дополнительного размера (с запасом), фактически превышающего размер строковой константы при начальном присвоение, как в варианте Str6

Символ окончания строки

Обычно строки оканчиваются нулевым символом (код 0 в ASCII). Это позволяет функциям (таким как Serial.print()) выявлять окончание строки. В противном случае могут считаться байты памяти, не принадлежащие переменной.

Массивы символов, выделяемый под строку, должен иметь один дополнительный элемент для символа конца строки. Именно поэтому Str2 и Str5 должны иметь 8 символом, хотя "arduino" 7 символов — последнему элементу автоматически присваивается символ окончания строки.

Технически возможно объявить строку без символа окончания строки, например, объявить длину массива равной 7 для Str2. Это приведет к некорректной работе функций, оперирующих строками.

Одинарные и двойные кавычки

Строки всегда объявляются внутри двойных кавычек ("Abc"). Символы — внутри одинарных ('A')

Инициализация длинных строк

Длинные строки могут быть объявлены так:

charmyString[] = "This is the first line"

" this is the second line"

 

" etcetera";

Массивы строк

При работе с большими объемами текстовой информации, например в проектах с LCD дисплеем, бывает удобно использовать массивы строк. Так как строки сами по себе массивы, массивы строк будет двумерным массивом.

В примере ниже, символ звездочки после объявления типа " char* " указывает на то, что это массив указателей. Это необходимо для задания двумерного массива. В данном случае не требуется понимания всех тонкостей работы с указателями.

Пример

char* myStrings[]={"This is string 1", "This is string 2", "This is string 3",

"This is string 4", "This is string 5","This is string 6"};

 

voidsetup(){

 

Serial.begin(9600);

}

 

voidloop(){

 

for(inti = 0; i < 6; i++){

Serial.println(myStrings[i]);

 

delay(500);

}

 

}

String

String класс появился в версии Arduino 0019. Этот класс позволяет хранить и манипулировать текстовыми строками, по сравнению с string (массивом символов) класс String предоставляет удобные функции для работы со строками, такие как поиск вхождения в строку, объединение строк и др. Класс String занимает несколько больше места в памяти, чем массив символов string.

Обратите внимание при обращение к классу String — он пишется с заглавной S. Массив символов string — с прописной s. Строковые константы, записанные в "двойных кавычка" интерпретируются компилятором как массив символов, а не объект класса String.

Функции

  • String()
  • charAt()
  • compareTo()
  • concat()
  • endsWith()
  • equals()
  • equalsIgnoreCase()
  • getBytes()
  • indexOf()
  • lastIndexOf()
  • length()
  • replace()
  • setCharAt()
  • startsWith()
  • substring()
  • toCharArray()
  • toLowerCase()
  • toUpperCase()
  • trim()

Операторы

  • [] (доступ к элементу строки)
  • + (объединение строк)
  • == (сравнение строк)

· Массивы

· Массивы (arrays) — именованный набор однотипных переменных, с доступом к отдельным элементам по их индексу.

· Объявление массивов

· Ниже приведены несколько корректных вариантов объявления массивов:

int myInts[6];

int myPins[] = {2, 4, 8, 3, 6};

·

int mySensVals[6] = {2, 4, -8, 3, 2};

char message[6] = "hello";

· Массив может быть объявлен без непосредственной инициализации элементов массива, как в случае массива myInts.

· Массив myPins был объявлен без явного задания размера. Компилятор сам посчитает фактическое количество элементов и создаcт в памяти массив необходимого размера.

· Размер может быть задан явно, одновременно с инициализацией элементов массива. Обратите внимания, что при создании массива типа char, необходим дополнительный элемент массива для нулевого символа. Подробнее см. строки.

· Доступ к элементам массива

· Индексация массива начинается с 0. Это значит, что для массива с 10-тью элементами, индекс 9 будет последним:

int myArray[10]={9,3,2,4,3,2,7,8,9,11};

// myArray[0] первый элемент, содержит 9

·

// myArray[9] последний элемент, содержит 11

// myArray[10] это неверно возможно возвращение произвольного значения из области памяти не относящийся к массиву

· Присваиваем значение элементу массива:

mySensVals[0] = 10;

· Возвращаем значение элемента массива:

x = mySensVals[4];

· Массивы и FOR циклы

· Чаще всего для перебора элементов цикла используется цикл for, счетчик цикла используется как индекс для доступа к каждому элементу массива. Например, для вывода массива через Serial порт можно использовать следующий код:

int i;

for (i = 0; i < 5; i = i + 1) {

·

Serial.println(myPins[i]);

}

Void

Ключевое слово void используется при объявлении функций, если функция не возвращает никакого значение при ее вызове (в некоторых языках программирования такие функции называют процедурами).

Пример

// в функциях "setup" и "loop" производятся некоторые действия,

// но ничего не возвращается во внешнюю программу

 

 

void setup()

 

{

//...

 

}

 

void loop()

{

 

//...

}

 


Поделиться с друзьями:

История создания датчика движения: Первый прибор для обнаружения движения был изобретен немецким физиком Генрихом Герцем...

Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначен­ные для поддерживания проводов на необходимой высоте над землей, водой...

Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...

Таксономические единицы (категории) растений: Каждая система классификации состоит из определённых соподчиненных друг другу...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.059 с.