Sergey-Ufa 0 Posted November 29, 2014 (edited) · Report post Эквивалентен ли тип _int8 типу char. а тип _int32 типу long int? Edited November 29, 2014 by Sergey-Ufa Quote Ответить с цитированием Share this post Link to post Share on other sites
Палыч 0 Posted November 29, 2014 · Report post Для "стандартных" типов данных в общем случае справедливо следующее неравенство: sizeof(long) >= sizeof(int) >= sizeof(short) >= sizeof(char) И - всё! Поэтому ответ на Ваш вопрос - нет. Quote Ответить с цитированием Share this post Link to post Share on other sites
SM 0 Posted November 29, 2014 · Report post Эквивалентен ли тип _int8 типу char. а тип _int32 типу long int? Никак нет. _int8, _int32 это нестандартные типы, которые каждый волен объявить как угодно. char стандартный, и может быть размером 8 бит или более (в некоторых реальных компиляторах он 16-битный). long int - тоже стандартный - минимум 32 бита, нередко реально 64-битный, встречал еще 40-битый. Если брать стандарт 2011, то char эквивалентен int_least8_t, а long int - int_least32_t (и то не уверен, вспоминая 40-битные DSP-шные лонги, а int_least32 там вроде и есть 32) Quote Ответить с цитированием Share this post Link to post Share on other sites
Sergey-Ufa 0 Posted November 29, 2014 · Report post Вопрос собственно возник по следующей причине. Программа WinFilter генерирует код реализации цифрового фильтра на С. Вот кусочки из него: static __int32 y[NCoef+1]; //output samples static __int16 x[NCoef+1]; //input samples __int8 iir(__int8 NewSample) {...}; В компиляторе CVAVR этих типов нет. Я предположил, что можно изменить код таким образом: static long int y[NCoef+1]; //output samples static int x[NCoef+1]; //input samples char iir(char NewSample) {...}; Будет ли это корректно? Спасибо всем, кто откликнулся. Quote Ответить с цитированием Share this post Link to post Share on other sites
Xenia 0 Posted November 29, 2014 · Report post В компиляторе CVAVR этих типов нет. Если этих типов компилятор не знает, то это просто замечательно! Тогда вы просто определите эти типы через #define и радуйтесь. А во всей программе делать замены не надо. Quote Ответить с цитированием Share this post Link to post Share on other sites
Sergey-Ufa 0 Posted November 29, 2014 · Report post Это так что-ли? #define _int32 long #define _int16 int #define _int8 char Quote Ответить с цитированием Share this post Link to post Share on other sites
demiurg_spb 0 Posted November 29, 2014 · Report post Это так что-ли?используйте для этого специально созданный инструмент typedef Quote Ответить с цитированием Share this post Link to post Share on other sites
Sergey-Ufa 0 Posted November 29, 2014 · Report post Хорошо, делаем так: typedef signed long int _int32; typedef signed int _int16; typedef signed char _int8; Но будет ли эквивалентна такая замена для выполнения кода? Вопрос, собственно, был именно об этом. Quote Ответить с цитированием Share this post Link to post Share on other sites
AHTOXA 0 Posted November 29, 2014 · Report post А это зависит от того, какой у вас процессор. На 32-разрядном ARM-е, например, signed int будет иметь ширину 32 бита. И для того, чтобы программисты так не мучились, в языке Си есть стандартный заголовочный файл stdint.h. С ним всё будет просто и однозначно: #include <stdint.h> typedef int32_t _int32; typedef int16_t _int16; typedef int8_t _int8; Quote Ответить с цитированием Share this post Link to post Share on other sites
Сергей Борщ 0 Posted November 29, 2014 · Report post Но будет ли эквивалентна такая замена для выполнения кода? Вопрос, собственно, был именно об этом.Скажем так: работать это будет. В случае AVR это будет, скорее всего, оптимально и по быстродействию, и по объему кода. Если вы возьмете более другой процессор - надо будет детально вникать в код. Возможно более "длинный" тип будет работать быстрее или операции с ним будут занимать меньше памяти кода. С ним всё будет просто и однозначноПока вы не дочитатете до определений типов uint_fastXX_t и uint_leastXX_t :) Quote Ответить с цитированием Share this post Link to post Share on other sites
AHTOXA 0 Posted November 29, 2014 · Report post Пока вы не дочитатете до определений типов uint_fastXX_t и uint_leastXX_t :) А эти типы добавлены специально для того, чтобы программистам жизнь мёдом не казалась:) Quote Ответить с цитированием Share this post Link to post Share on other sites
demiurg_spb 0 Posted December 1, 2014 · Report post Я регулярно их использую. И получаю от это удовольствие:) Quote Ответить с цитированием Share this post Link to post Share on other sites