sonycman 0 1 мая, 2010 Опубликовано 1 мая, 2010 · Жалоба Всегда считал, что на армах int - это 32 битное число со знаком: 31 бит на само значение и один бит для знака. Long - вроде тоже самое. Но вот случайно заметил, что в сишной библиотеке есть две различные функции ABS() - для int и LABS() для long. Значит, int и long всё же чем то отличаются? Чем же? :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 1 мая, 2010 Опубликовано 1 мая, 2010 · Жалоба Библиотека stdlib она сишная, а не только армовская. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sonycman 0 1 мая, 2010 Опубликовано 1 мая, 2010 · Жалоба То есть labs() работает всегда с 32 битными числами, а abs() в зависимости от размерности int на конкретной платформе? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sigmaN 0 1 мая, 2010 Опубликовано 1 мая, 2010 · Жалоба А у меня на TI C200 int 16бит, а long - 32. Чтобы не заморачиваться с портабельностью, вот, почитайте http://en.wikipedia.org/wiki/Stdint.h и используйте всегда и везде ) Там уж если написал uint32_t - то он и в африке будет uint32_t ) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sonycman 0 1 мая, 2010 Опубликовано 1 мая, 2010 · Жалоба Чтобы не заморачиваться с портабельностью, вот, почитайте http://en.wikipedia.org/wiki/Stdint.h и используйте всегда и везде ) Там уж если написал uint32_t - то он и в африке будет uint32_t ) Спасибо :) Но я привык уже к обычным char, short, byte, word и dword, long`ом не пользуюсь за ненадобностью, так как на 32 битах его заменяет простой int. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sigmaN 0 1 мая, 2010 Опубликовано 1 мая, 2010 · Жалоба Ну привык то привык. А вот в упоминаемом выше C2000, char - 16бит. ))) Вот и портабельность ))) На сколько я знаю, вся эта канитель от того, что стандарт лишь описывает условие sizeof(char)<=sizeof(int)<=sizeof(long) и это имплементэйшн дэфайнэд. А вот Stdint.h подгоняют под каждый компилятор специально чтобы там было всё чётко. Для эмбеддеров это просто находка )) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 1 мая, 2010 Опубликовано 1 мая, 2010 · Жалоба Там уж если написал uint32_t - то он и в африке будет uint32_t ) А вот в Aфрике не всегда нужны жестко определенные типы. Нафига мне какой-нибудь uint8_t отпортированный с AVR в качестве, например счетчика цикла на ARM? Впрочем, это все уже обсуждалось многократно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 1 мая, 2010 Опубликовано 1 мая, 2010 · Жалоба А вот в Aфрике не всегда нужны жестко определенные типы. Нафига мне какой-нибудь uint8_t отпортированный с AVR в качестве, например счетчика цикла на ARM? Впрочем, это все уже обсуждалось многократно. uint_fast8_t как раз для такого случая. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 1 мая, 2010 Опубликовано 1 мая, 2010 · Жалоба uint_fast8_t как раз для такого случая. Я же уже сказал - многократно обсуждалось. Ну, раз начали, тогда уже до конца рассказывайте, почему назвали не int_fast8_t, или int_least8_t Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 1 мая, 2010 Опубликовано 1 мая, 2010 · Жалоба Я же уже сказал - многократно обсуждалось. Ну, раз начали, тогда уже до конца рассказывайте, почему назвали не 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.) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться