Вывод данных из массива

vvadim
Offline
Зарегистрирован: 23.05.2012

Супппппппппер, ЧИТАЕТ!  СПАСИБО.

Как я понимаю,  для четырёх переменных запись на карту аналогично, а при чтении сдвиг на 4 байта

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Только однажды написав так:

unsigned int i;
...
if( i > 0 )
...
i -= 2;
 

можно нарваться на большие проблемы. Посчитайте, например, сколько будет, если из 1 вычесть 2 для беззнакового числа. В таких случаях i надо делать знаковым (signed), тогда всё будет работать даже если 1 - 2.

 

vvadim
Offline
Зарегистрирован: 23.05.2012

Учёл, спасибо. 

toly
Offline
Зарегистрирован: 17.05.2014

Змечание правильное, но тут все еще зависит от компиллятора и надо пробовать, чтобы понять как именно оно будет работать на данной платформе. При сравнении >0 по идее должен проверяться только самый старший бит вне зависимости от того знаковой или беззнаковой объявлена переменная. 

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Хотите поиграть в рулетку? Не вопрос, поиграйте. Я предпочитаю надежный код, который не зависит от компилятора.

Предлагаю проверить и сообщить результат. Я проверяю свой вариант, Вы - свой. Я проверю на ArduinoIDE и Леонардо в железе & Atmel Studio 6.1 на симуляторе.

Но это уже завтра, сегодня конец недели, тяжко.

Для проверки делаем такой код:

void setup()
{
  Serial.begin( 57600 );
}

void loop()
{
  unsigned int val = 1;
  val -= 2;
  Serial.print( "val = " );
  Serial.println( val );
  if( val > 0 )
  {
    Serial.println( "val > 0" );
  }
  else
  {
    Serial.println( "val <= 0" );
  }
  delay( 1000 );
}

PS Я философствовать тоже умею, но проще проверить и не парить мозг.