Sergey-Ufa 0 29 ноября, 2014 Опубликовано 29 ноября, 2014 (изменено) · Жалоба Эквивалентен ли тип _int8 типу char. а тип _int32 типу long int? Изменено 29 ноября, 2014 пользователем Sergey-Ufa Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Палыч 6 29 ноября, 2014 Опубликовано 29 ноября, 2014 · Жалоба Для "стандартных" типов данных в общем случае справедливо следующее неравенство: sizeof(long) >= sizeof(int) >= sizeof(short) >= sizeof(char) И - всё! Поэтому ответ на Ваш вопрос - нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 29 ноября, 2014 Опубликовано 29 ноября, 2014 · Жалоба Эквивалентен ли тип _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) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sergey-Ufa 0 29 ноября, 2014 Опубликовано 29 ноября, 2014 · Жалоба Вопрос собственно возник по следующей причине. Программа 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) {...}; Будет ли это корректно? Спасибо всем, кто откликнулся. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Xenia 35 29 ноября, 2014 Опубликовано 29 ноября, 2014 · Жалоба В компиляторе CVAVR этих типов нет. Если этих типов компилятор не знает, то это просто замечательно! Тогда вы просто определите эти типы через #define и радуйтесь. А во всей программе делать замены не надо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sergey-Ufa 0 29 ноября, 2014 Опубликовано 29 ноября, 2014 · Жалоба Это так что-ли? #define _int32 long #define _int16 int #define _int8 char Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg_spb 0 29 ноября, 2014 Опубликовано 29 ноября, 2014 · Жалоба Это так что-ли?используйте для этого специально созданный инструмент typedef Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sergey-Ufa 0 29 ноября, 2014 Опубликовано 29 ноября, 2014 · Жалоба Хорошо, делаем так: typedef signed long int _int32; typedef signed int _int16; typedef signed char _int8; Но будет ли эквивалентна такая замена для выполнения кода? Вопрос, собственно, был именно об этом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 14 29 ноября, 2014 Опубликовано 29 ноября, 2014 · Жалоба А это зависит от того, какой у вас процессор. На 32-разрядном ARM-е, например, signed int будет иметь ширину 32 бита. И для того, чтобы программисты так не мучились, в языке Си есть стандартный заголовочный файл stdint.h. С ним всё будет просто и однозначно: #include <stdint.h> typedef int32_t _int32; typedef int16_t _int16; typedef int8_t _int8; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 29 ноября, 2014 Опубликовано 29 ноября, 2014 · Жалоба Но будет ли эквивалентна такая замена для выполнения кода? Вопрос, собственно, был именно об этом.Скажем так: работать это будет. В случае AVR это будет, скорее всего, оптимально и по быстродействию, и по объему кода. Если вы возьмете более другой процессор - надо будет детально вникать в код. Возможно более "длинный" тип будет работать быстрее или операции с ним будут занимать меньше памяти кода. С ним всё будет просто и однозначноПока вы не дочитатете до определений типов uint_fastXX_t и uint_leastXX_t :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 14 29 ноября, 2014 Опубликовано 29 ноября, 2014 · Жалоба Пока вы не дочитатете до определений типов uint_fastXX_t и uint_leastXX_t :) А эти типы добавлены специально для того, чтобы программистам жизнь мёдом не казалась:) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg_spb 0 1 декабря, 2014 Опубликовано 1 декабря, 2014 · Жалоба Я регулярно их использую. И получаю от это удовольствие:) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться