реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Эквивалентность типов
Sergey-Ufa
сообщение Nov 29 2014, 05:28
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 37
Регистрация: 27-10-13
Из: Уфа
Пользователь №: 78 917



Эквивалентен ли тип _int8 типу char. а тип _int32 типу long int?

Сообщение отредактировал Sergey-Ufa - Nov 29 2014, 05:28
Go to the top of the page
 
+Quote Post
Палыч
сообщение Nov 29 2014, 05:56
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Для "стандартных" типов данных в общем случае справедливо следующее неравенство:

sizeof(long) >= sizeof(int) >= sizeof(short) >= sizeof(char)

И - всё! Поэтому ответ на Ваш вопрос - нет.
Go to the top of the page
 
+Quote Post
SM
сообщение Nov 29 2014, 07:54
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(Sergey-Ufa @ Nov 29 2014, 08:28) *
Эквивалентен ли тип _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)
Go to the top of the page
 
+Quote Post
Sergey-Ufa
сообщение Nov 29 2014, 14:42
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 37
Регистрация: 27-10-13
Из: Уфа
Пользователь №: 78 917



Вопрос собственно возник по следующей причине. Программа 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) {...};
Будет ли это корректно? Спасибо всем, кто откликнулся.
Go to the top of the page
 
+Quote Post
Xenia
сообщение Nov 29 2014, 14:52
Сообщение #5


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Цитата(Sergey-Ufa @ Nov 29 2014, 17:42) *
В компиляторе CVAVR этих типов нет.


Если этих типов компилятор не знает, то это просто замечательно! Тогда вы просто определите эти типы через #define и радуйтесь. А во всей программе делать замены не надо.
Go to the top of the page
 
+Quote Post
Sergey-Ufa
сообщение Nov 29 2014, 15:42
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 37
Регистрация: 27-10-13
Из: Уфа
Пользователь №: 78 917



Это так что-ли?
#define _int32 long
#define _int16 int
#define _int8 char
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Nov 29 2014, 16:40
Сообщение #7


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(Sergey-Ufa @ Nov 29 2014, 19:42) *
Это так что-ли?
используйте для этого специально созданный инструмент typedef


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
Sergey-Ufa
сообщение Nov 29 2014, 17:31
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 37
Регистрация: 27-10-13
Из: Уфа
Пользователь №: 78 917



Хорошо, делаем так:

typedef signed long int _int32;
typedef signed int _int16;
typedef signed char _int8;

Но будет ли эквивалентна такая замена для выполнения кода? Вопрос, собственно, был именно об этом.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Nov 29 2014, 18:35
Сообщение #9


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



А это зависит от того, какой у вас процессор. На 32-разрядном ARM-е, например, signed int будет иметь ширину 32 бита.
И для того, чтобы программисты так не мучились, в языке Си есть стандартный заголовочный файл stdint.h.
С ним всё будет просто и однозначно:
Код
#include <stdint.h>
typedef int32_t _int32;
typedef int16_t _int16;
typedef int8_t _int8;


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 29 2014, 18:48
Сообщение #10


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Sergey-Ufa @ Nov 29 2014, 19:31) *
Но будет ли эквивалентна такая замена для выполнения кода? Вопрос, собственно, был именно об этом.
Скажем так: работать это будет. В случае AVR это будет, скорее всего, оптимально и по быстродействию, и по объему кода. Если вы возьмете более другой процессор - надо будет детально вникать в код. Возможно более "длинный" тип будет работать быстрее или операции с ним будут занимать меньше памяти кода.


Цитата(AHTOXA @ Nov 29 2014, 20:35) *
С ним всё будет просто и однозначно
Пока вы не дочитатете до определений типов uint_fastXX_t и uint_leastXX_t sm.gif


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Nov 29 2014, 18:55
Сообщение #11


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(Сергей Борщ @ Nov 29 2014, 23:48) *
Пока вы не дочитатете до определений типов uint_fastXX_t и uint_leastXX_t sm.gif

А эти типы добавлены специально для того, чтобы программистам жизнь мёдом не казаласьsm.gif


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Dec 1 2014, 09:09
Сообщение #12


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(AHTOXA @ Nov 29 2014, 22:55) *
Я регулярно их использую. И получаю от это удовольствиеsm.gif


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th July 2025 - 14:38
Рейтинг@Mail.ru


Страница сгенерированна за 0.0147 секунд с 7
ELECTRONIX ©2004-2016