Огромное спасибо за ответы! Теперь уяснил. Сегодня писал программу, так вот дебагил одни ошибки из-за преобразований типов, потратил много времени.
Если кому еще интересна эта тема, вот такое еще было:
eeprom unsigned char edata[20][8]={{90,0,...},{}...}; unsigned int a;
далее в тексте a=edata[0][0]+edata[0][1]<<8;
т.е. интегер хранится в двух первых байтах, сначала младший потом старший. Компилер выдал, что edata[0][1]<<8 получится в любом случае 0. Я переписал a=(int)edata[0][0]+edata[0][1]<<8;
опять неправильно. Компилер не ругался, но результат был 90х256=23040. Правильным вариантом оказалось: a=edata[0][0]+(int)edata[0][1]<<8;
|