Типы данных с PIC18?

Какой тип данных использовать для хранения следующего значения?

Значение: 86400

код:

int d[6];
unsigned int all;
d[0] = 8;
d[1] = 6;
d[2] = 4;
d[3] = 0;
d[4] = 0;

all =  10000*d[0] + 1000*d[1] + 100*d[2] + 10*d[3] +  d[4];
printf("%u", all);

Если я скопирую этот код в CodeBlocks, он будет работать нормально. Однако на компиляторе MPLAB C18 я бы получил другой результат.

Вывод CodeBlock: 86400

Вывод MPLAB: 20864

Как это исправить? Спасибо!


person Ammar    schedule 07.05.2013    source источник
comment
Разве вы уже не задавали здесь этот вопрос? - Предыдущая тема   -  person embedded_guy    schedule 07.05.2013


Ответы (1)


Тип int не обязательно должен быть 32-битным, это может быть, например, 16 бит (т.е. имеют значения от 0 до 65535 для unsigned int). Так обстоит дело здесь. Здесь вам нужно использовать тип long.

person Some programmer dude    schedule 07.05.2013
comment
Я тоже долго пользовался и получил тот же результат 20864, ​​что странно. - person Ammar; 07.05.2013
comment
@Ammar Вам нужно использовать long для обеих переменных. - person Some programmer dude; 07.05.2013
comment
@Ammar И, конечно, вам нужно изменить формат printf на "%lu". - person Some programmer dude; 07.05.2013
comment
Вы, вероятно, правы, у меня нет PIC18, чтобы подтвердить это сейчас, но завтра у меня будет. Если я использую long, разве мой спецификатор не должен быть просто %l? - person Ammar; 07.05.2013
comment
@Ammar Нет, l в формате - это просто дополнительный модификатор, который сообщает функции printf, что значение является длинным (которое может отличаться в зависимости от фактической спецификации типа). - person Some programmer dude; 07.05.2013
comment
Итак, мои переменные d и all должны быть объявлены как long, а в операторе printf я должен использовать %lu, верно? - person Ammar; 07.05.2013
comment
@Ammar Ну, all должно быть unsigned long, но в остальном это правильно. - person Some programmer dude; 07.05.2013
comment
Завтра тестирую и оцениваю ответ. Я очень ценю вашу помощь! - person Ammar; 07.05.2013