Форум программистов
 
О проблемах с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail


Ответ
 
Опции темы
Старый 28.08.2010, 15:04   #1
Kn793
Форумчанин
 
Регистрация: 20.06.2008
Сообщений: 125
По умолчанию int vs unsigned int

Собственно вопрос о хорошем стиле.
Заметил, что большинство программистов используют int вместо unsigned int даже там, где значение не может быть отрицательным.
Например функцию, возвращающую вектор простых чисел стоит объявить первым или вторым образом? Почему?
Код:
vector<int> * primeNumbers(int maxValue);
Код:
vector<unsigned int> * primeNumbers(unsigned int maxValue);
Kn793 вне форума Ответить с цитированием
Старый 28.08.2010, 15:08   #2
pproger
C++ hater
СуперМодератор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,337
По умолчанию

от тебя зависит. может ты захочешь разницу находить между простыми числами, кто тя знает
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 28.08.2010, 15:20   #3
Carbon
JAVA BEAN
Участник клуба
 
Аватар для Carbon
 
Регистрация: 22.04.2007
Сообщений: 1,331
По умолчанию

int короче писать.
Carbon вне форума Ответить с цитированием
Старый 28.08.2010, 15:21   #4
pproger
C++ hater
СуперМодератор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,337
По умолчанию

2Carbon
Цитата:
int короче писать.
typedef же
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 28.08.2010, 15:56   #5
Impuls1989
Форумчанин
 
Аватар для Impuls1989
 
Регистрация: 16.08.2008
Сообщений: 276
По умолчанию

Цитата:
Сообщение от pproger Посмотреть сообщение
typedef же
Ни в коем случае. Модификатор типа unsigned указывает, что переменная принимает неотрицательные значения. При этом самый левый бит области памяти, выделяемой для хранения значения, используется так же, как и все остальные биты области памяти - для представления значения. В отличии от signed, где самый левый бит применяется для представления знака...
Как правильно заметили: так короче писать... Еще как вариант: так надежнее (не всегда хорошо). Приведу маленький пример: У Вас есть банковская система, и Вы производите операции с ДС. Тут вы делаете роковую ошибку и случайно заносите значение -1 (ну забыли, или храните в ней что-нибудь "нужное"). Далее 2 пути:
unsighd int:
unsighd int видит -1 и никого не спрашивая конвертит ее в 65535 со всеми вытекающими последствиями...На счет клиента идет сумма в 65 с копейками миллионов $... (Неприятно?)
signed int (int):
Программа вылетает с ошибкой и Вы с угрюмой миной ищите злополучную ошибку. Ну или со счета снимается сумма в 1 млн $
Вариантов море и все выглядят убедительно.
Искусственный интеллект - фигня по сравнению с естественной глупостью
Impuls1989 вне форума Ответить с цитированием
Старый 28.08.2010, 16:05   #6
Carbon
JAVA BEAN
Участник клуба
 
Аватар для Carbon
 
Регистрация: 22.04.2007
Сообщений: 1,331
По умолчанию

А ещё unsigned int нужно применять с осторожностью в циклах с обратным ходом:

Код:
for (unsigned i = v.size() - 1; i >= 0; --i) ...
Carbon вне форума Ответить с цитированием
Старый 28.08.2010, 16:38   #7
pproger
C++ hater
СуперМодератор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,337
По умолчанию

2Impuls1989
Цитата:
Ни в коем случае. Модификатор типа unsigned указывает, что переменная принимает неотрицательные значения. При этом самый левый бит области памяти, выделяемой для хранения значения, используется так же, как и все остальные биты области памяти - для представления значения. В отличии от signed, где самый левый бит применяется для представления знака...
Как правильно заметили: так короче писать... Еще как вариант: так надежнее (не всегда хорошо). Приведу маленький пример: У Вас есть банковская система, и Вы производите операции с ДС. Тут вы делаете роковую ошибку и случайно заносите значение -1 (ну забыли, или храните в ней что-нибудь "нужное"). Далее 2 пути:
unsighd int:
unsighd int видит -1 и никого не спрашивая конвертит ее в 65535 со всеми вытекающими последствиями...На счет клиента идет сумма в 65 с копейками миллионов $... (Неприятно?)
signed int (int):
Программа вылетает с ошибкой и Вы с угрюмой миной ищите злополучную ошибку. Ну или со счета снимается сумма в 1 млн $
Вариантов море и все выглядят убедительно.
выдыхай, бобер. к чему была эта тирада?

я предложил typedef для сокращения unsigned int, т.к предыдущий оратор заявил, что лучше писать короче.
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 28.08.2010, 17:05   #8
pproger
C++ hater
СуперМодератор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,337
По умолчанию

2Carbon
Цитата:
А ещё unsigned int нужно применять с осторожностью в циклах с обратным ходом:
да и с прямым тоже

Код:
for (unsigned char c = 0; c < 256; c++) {}
шарах.
интернет седня хуже некуда....
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance

Последний раз редактировалось pproger; 28.08.2010 в 17:08.
pproger вне форума Ответить с цитированием
Старый 28.08.2010, 17:28   #9
Carbon
JAVA BEAN
Участник клуба
 
Аватар для Carbon
 
Регистрация: 22.04.2007
Сообщений: 1,331
По умолчанию

Цитата:
Сообщение от pproger Посмотреть сообщение
2Carbon


да и с прямым тоже

Код:
for (unsigned char c = 0; c < 256; c++) {}
шарах.
интернет седня хуже некуда....
Мы ж про int говорили...
Carbon вне форума Ответить с цитированием
Старый 28.08.2010, 17:51   #10
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

Цитата:
А ещё unsigned int нужно применять с осторожностью в циклах с обратным ходом:
А разве программа не завершится из-за не обработанного исключения (переполнение) ? (по крайней мере, сделанные в билдере проги ведут себя именно так)
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс
ROD вне форума Ответить с цитированием
Ответ
Купить рекламу на форуме 20000 рублей в месяц
Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[РЕШЕНО][C] unsigned int аргумент работает как signed Sfuller Общие вопросы C/C++ 2 30.06.2010 17:17
int **x Di3el Общие вопросы C/C++ 11 16.12.2009 19:22
float to int Артэс Общие вопросы C/C++ 1 14.12.2009 01:20
AnsiString to Int NoF[1]X Общие вопросы C/C++ 4 21.07.2009 23:08
float to int span4 SQL, базы данных 7 01.06.2009 09:57


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS