Перейти к содержанию
    

В чём различие между int и long int?

Всегда считал, что на армах int - это 32 битное число со знаком: 31 бит на само значение и один бит для знака.

Long - вроде тоже самое.

 

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

 

Значит, int и long всё же чем то отличаются?

Чем же? :(

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

То есть labs() работает всегда с 32 битными числами, а abs() в зависимости от размерности int на конкретной платформе?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А у меня на TI C200 int 16бит, а long - 32.

 

Чтобы не заморачиваться с портабельностью, вот, почитайте http://en.wikipedia.org/wiki/Stdint.h и используйте всегда и везде )

Там уж если написал uint32_t - то он и в африке будет uint32_t )

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Чтобы не заморачиваться с портабельностью, вот, почитайте http://en.wikipedia.org/wiki/Stdint.h и используйте всегда и везде )

Там уж если написал uint32_t - то он и в африке будет uint32_t )

Спасибо :)

 

Но я привык уже к обычным char, short, byte, word и dword, long`ом не пользуюсь за ненадобностью, так как на 32 битах его заменяет простой int.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну привык то привык. А вот в упоминаемом выше C2000, char - 16бит. )))

Вот и портабельность )))

На сколько я знаю, вся эта канитель от того, что стандарт лишь описывает условие sizeof(char)<=sizeof(int)<=sizeof(long) и это имплементэйшн дэфайнэд.

А вот Stdint.h подгоняют под каждый компилятор специально чтобы там было всё чётко. Для эмбеддеров это просто находка ))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Там уж если написал uint32_t - то он и в африке будет uint32_t )

А вот в Aфрике не всегда нужны жестко определенные типы. Нафига мне какой-нибудь uint8_t отпортированный с AVR в качестве, например счетчика цикла на ARM? Впрочем, это все уже обсуждалось многократно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А вот в Aфрике не всегда нужны жестко определенные типы. Нафига мне какой-нибудь uint8_t отпортированный с AVR в качестве, например счетчика цикла на ARM? Впрочем, это все уже обсуждалось многократно.

uint_fast8_t как раз для такого случая.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

uint_fast8_t как раз для такого случая.

Я же уже сказал - многократно обсуждалось. Ну, раз начали, тогда уже до конца рассказывайте, почему назвали не int_fast8_t, или int_least8_t

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я же уже сказал - многократно обсуждалось. Ну, раз начали, тогда уже до конца рассказывайте, почему назвали не 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.)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...