Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: В чём различие между int и long int?
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
sonycman
Всегда считал, что на армах int - это 32 битное число со знаком: 31 бит на само значение и один бит для знака.
Long - вроде тоже самое.

Но вот случайно заметил, что в сишной библиотеке есть две различные функции ABS() - для int и LABS() для long.

Значит, int и long всё же чем то отличаются?
Чем же? sad.gif
zltigo
Библиотека stdlib она сишная, а не только армовская.
sonycman
То есть labs() работает всегда с 32 битными числами, а abs() в зависимости от размерности int на конкретной платформе?
sigmaN
А у меня на TI C200 int 16бит, а long - 32.

Чтобы не заморачиваться с портабельностью, вот, почитайте http://en.wikipedia.org/wiki/Stdint.h и используйте всегда и везде )
Там уж если написал uint32_t - то он и в африке будет uint32_t )
sonycman
Цитата(sigmaN @ May 1 2010, 23:53) *
Чтобы не заморачиваться с портабельностью, вот, почитайте http://en.wikipedia.org/wiki/Stdint.h и используйте всегда и везде )
Там уж если написал uint32_t - то он и в африке будет uint32_t )

Спасибо smile.gif

Но я привык уже к обычным char, short, byte, word и dword, long`ом не пользуюсь за ненадобностью, так как на 32 битах его заменяет простой int.
sigmaN
Ну привык то привык. А вот в упоминаемом выше C2000, char - 16бит. )))
Вот и портабельность )))
На сколько я знаю, вся эта канитель от того, что стандарт лишь описывает условие sizeof(char)<=sizeof(int)<=sizeof(long) и это имплементэйшн дэфайнэд.
А вот Stdint.h подгоняют под каждый компилятор специально чтобы там было всё чётко. Для эмбеддеров это просто находка ))
zltigo
Цитата(sigmaN @ May 1 2010, 22:53) *
Там уж если написал uint32_t - то он и в африке будет uint32_t )

А вот в Aфрике не всегда нужны жестко определенные типы. Нафига мне какой-нибудь uint8_t отпортированный с AVR в качестве, например счетчика цикла на ARM? Впрочем, это все уже обсуждалось многократно.
Genadi Zawidowski
Цитата(zltigo @ May 2 2010, 01:44) *
А вот в Aфрике не всегда нужны жестко определенные типы. Нафига мне какой-нибудь uint8_t отпортированный с AVR в качестве, например счетчика цикла на ARM? Впрочем, это все уже обсуждалось многократно.

uint_fast8_t как раз для такого случая.
zltigo
Цитата(Genadi Zawidowski @ May 2 2010, 01:00) *
uint_fast8_t как раз для такого случая.

Я же уже сказал - многократно обсуждалось. Ну, раз начали, тогда уже до конца рассказывайте, почему назвали не int_fast8_t, или int_least8_t
Genadi Zawidowski
Цитата(zltigo @ May 2 2010, 02:13) *
Я же уже сказал - многократно обсуждалось. Ну, раз начали, тогда уже до конца рассказывайте, почему назвали не int_fast8_t, или int_least8_t


Я про то, что это с минимальными проблемами позволило бы портировать счётчики из авровского проекта.
uint_fast8_t вместо int_fast8_t - помню про архитектуры где беззнаковые сравнения дешевле чем знаковые.
uint_fast8_t вместо int_least8_t - опять же про архитектуры и про то, что использование полного 32-х битного регистра при *fast скорее произойдёт, чем при *least (least более широкое множество типов может представлять, как мне показалось из текста стандарта Committee Draft — August 3, 1998 WG14/N843 - пункт 7.18 и его подпункты)
Цитата
2 Types are defined in the following categories:
— integer types having certain exact widths;
— integer types having at least certain specified widths;
— fastest integer types having at least certain specified widths;
— integer types wide enough to hold pointers to objects;
— integer types having greatest width.
(Some of these types may denote the same type.)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.