IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Максимально возможное значение типа, С++
сообщение
Сообщение #1


Я.
****

Группа: Пользователи
Сообщений: 809
Пол: Мужской
Реальное имя: Саша

Репутация: -  11  +


Максимально возможное значение типа
unsigned int j = (1 << (sizeof(имя типа) << 3)) - 1; 
как избавиться от вычисления 1 << (sizeof(имя типа) << 3) т.к. warning: left shift count >= width of type ?
Можно, конечно, так, но это не красиво:
unsigned int j = ((unsigned int)(1 << ((sizeof(int *) << 3) - 1)) - 1) + (1 << ((sizeof(int *) << 3) - 1));
Ну или просто обмануть, умножив на 2.

Сообщение отредактировано: sheka -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гуру
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской
Ада: Разработчик
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик

Репутация: -  627  +


Не пользоваться неправильным методом вычисления. Допустим, размер типа - 4 байта (тот же int). Что выдает твоя формула?

(1 << (4 << 3)) - 1 = (1 << 32) - 1 = 4294967295 (для этого тоже нужны доп. телодвижения, чтобы получить это число, но допустим, получил). Но макс. значение типа int вполовину меньше, он же знаковый...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Я.
****

Группа: Пользователи
Сообщений: 809
Пол: Мужской
Реальное имя: Саша

Репутация: -  11  +


Для беззнаковых.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гуру
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской
Ада: Разработчик
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик

Репутация: -  627  +


    long long maxval = (static_cast<long long>(1) << (sizeof(int) << 3)) - 1;

Но это будет работать только для тех типов, размер которых меньше размера long long иначе опять получишь то же предупреждение.

А вот это:
cout << numeric_limits<long long>::max() << endl; // #include <limits>

будет работать всегда smile.gif

Сообщение отредактировано: IUnknown -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Я.
****

Группа: Пользователи
Сообщений: 809
Пол: Мужской
Реальное имя: Саша

Репутация: -  11  +


Т.е. культурного решения, кроме как взять тип большей вместимости, нет?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гуру
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской
Ада: Разработчик
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик

Репутация: -  627  +


См. выше, и не изобретай велосипед. "Все уже придумано до нас" (С) smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


unsigned long i = -1
получили максимальное значение, гы


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 19.04.2024 16:33
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name