Помощь - Поиск - Пользователи - Календарь
Полная версия: Максимально возможное значение типа
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Ада и другие языки
sheka
Максимально возможное значение типа
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.
IUnknown
Не пользоваться неправильным методом вычисления. Допустим, размер типа - 4 байта (тот же int). Что выдает твоя формула?

(1 << (4 << 3)) - 1 = (1 << 32) - 1 = 4294967295 (для этого тоже нужны доп. телодвижения, чтобы получить это число, но допустим, получил). Но макс. значение типа int вполовину меньше, он же знаковый...
sheka
Для беззнаковых.
IUnknown
    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
sheka
Т.е. культурного решения, кроме как взять тип большей вместимости, нет?
IUnknown
См. выше, и не изобретай велосипед. "Все уже придумано до нас" (С) smile.gif
TarasBer
unsigned long i = -1
получили максимальное значение, гы
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.