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

 
 
 
Reply to this topicStart new topic
> В чём различие между int и long int?, на ARM?
sonycman
сообщение May 1 2010, 19:27
Сообщение #1


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



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

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

Значит, int и long всё же чем то отличаются?
Чем же? sad.gif
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 1 2010, 19:31
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Библиотека stdlib она сишная, а не только армовская.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
sonycman
сообщение May 1 2010, 19:46
Сообщение #3


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



То есть labs() работает всегда с 32 битными числами, а abs() в зависимости от размерности int на конкретной платформе?
Go to the top of the page
 
+Quote Post
sigmaN
сообщение May 1 2010, 19:53
Сообщение #4


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



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

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


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
sonycman
сообщение May 1 2010, 20:50
Сообщение #5


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(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.
Go to the top of the page
 
+Quote Post
sigmaN
сообщение May 1 2010, 21:10
Сообщение #6


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



Ну привык то привык. А вот в упоминаемом выше C2000, char - 16бит. )))
Вот и портабельность )))
На сколько я знаю, вся эта канитель от того, что стандарт лишь описывает условие sizeof(char)<=sizeof(int)<=sizeof(long) и это имплементэйшн дэфайнэд.
А вот Stdint.h подгоняют под каждый компилятор специально чтобы там было всё чётко. Для эмбеддеров это просто находка ))


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 1 2010, 21:44
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(sigmaN @ May 1 2010, 22:53) *
Там уж если написал uint32_t - то он и в африке будет uint32_t )

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


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение May 1 2010, 22:00
Сообщение #8


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



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

uint_fast8_t как раз для такого случая.
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 1 2010, 22:13
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



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

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


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение May 1 2010, 22:35
Сообщение #10


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



Цитата(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.)
Go to the top of the page
 
+Quote Post

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

 


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


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