Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.01.2012, 18:24   #1
viron
Форумчанин
 
Аватар для viron
 
Регистрация: 02.12.2011
Сообщений: 110
По умолчанию long long в Microsoft Visual C++

Вот столкнулся с одной проблемой. Не могу понять почему так.
У меня Microsoft Visual C++ версии 7.1 И в файле limits.h где определены
минимальные и максимальные значения для основных типов данных записано
для long long вот это:
Код:
#define LLONG_MAX     0x7fffffffffffffff  /*maximum signed __int64 value */
#define LLONG_MIN     0x8000000000000000  /*minimum signed __int64 value */
То есть минимальное на 1 больше максимального Я так понимаю что просто минуса не хватает у LLONG_MIN. А можно самому поставить этот минус или нельзя? Ничего страшного из этого не получиться?
viron вне форума Ответить с цитированием
Старый 07.01.2012, 18:28   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

вообще то учитывая что там написано все в хексе то все верно.
переведите это в знаковый десятичный вид.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 07.01.2012, 18:31   #3
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Сообщение от 2010 Express
Код:
#define LLONG_MAX     9223372036854775807i64       /* maximum signed long long int value */
#define LLONG_MIN   (-9223372036854775807i64 - 1)  /* minimum signed long long int value */
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 07.01.2012, 18:32   #4
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

viron

То есть минимальное на 1 больше максимального

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

Ничего страшного из этого не получиться?

За тобой начнет охоту зондер-команда microsoft o_0, а так ничего страшного
Rififi вне форума Ответить с цитированием
Старый 07.01.2012, 18:35   #5
Сtrl
C++
Форумчанин
 
Аватар для Сtrl
 
Регистрация: 27.03.2011
Сообщений: 803
По умолчанию

Здесь используется переполнение. Например, если переменной типа signed char присвоить 128, в ней окажется -128, ибо предел равен 127.
Ищете информацию по C++?
cplusplus.com
Сtrl вне форума Ответить с цитированием
Старый 07.01.2012, 18:43   #6
viron
Форумчанин
 
Аватар для viron
 
Регистрация: 02.12.2011
Сообщений: 110
По умолчанию

А вот еще что сама программа выводит
Код:
	cout << "LLONG_MIN = "  << LLONG_MIN	<< endl
	       << "LLONG_MAX = " << LLONG_MAX << endl;
Вот как Alex11223 предложил, наверно так и сделаю.
Изображения
Тип файла: jpg 111.JPG (15.6 Кб, 49 просмотров)

Последний раз редактировалось viron; 07.01.2012 в 18:46.
viron вне форума Ответить с цитированием
Старый 07.01.2012, 18:48   #7
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

А вот еще что сама программа выводит

А теперь - как правильно:

std::cout << (std::numeric_limits<long long>::min)() << std::endl;
std::cout << (std::numeric_limits<long long>::max)() << std::endl;
Rififi вне форума Ответить с цитированием
Старый 07.01.2012, 18:51   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
А вот еще что сама программа выводит
вот о чем я и говорил как то, минус дефайна в отсутствии типизации.
а если бы указали типы сами бы то вывело бы правильно поидее.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 07.01.2012, 19:03   #9
Сtrl
C++
Форумчанин
 
Аватар для Сtrl
 
Регистрация: 27.03.2011
Сообщений: 803
По умолчанию

Цитата:
Сообщение от viron Посмотреть сообщение
А вот еще что сама программа выводит
Код:
	cout << "LLONG_MIN = "  << LLONG_MIN	<< endl
	       << "LLONG_MAX = " << LLONG_MAX << endl;
Rififi правильно написал про numeric_limits, но в вашем случае нужно сделать так:
Код:
cout << "LLONG_MIN = "  << (long long)LLONG_MIN	<< endl
	       << "LLONG_MAX = " << (long long)LLONG_MAX << endl;
Ищете информацию по C++?
cplusplus.com
Сtrl вне форума Ответить с цитированием
Старый 07.01.2012, 19:11   #10
viron
Форумчанин
 
Аватар для viron
 
Регистрация: 02.12.2011
Сообщений: 110
По умолчанию

Понял в чем дело. Спасибо всем что объяснили. Но вот теперь в этом коде куча ошибок.
Код:
std::cout << (std::numeric_limits<long long>::min)() << std::endl;
std::cout << (std::numeric_limits<long long>::max)() << std::endl;
error C2039: 'numeric_limits' : is not a member of 'std'
error C2065: 'numeric_limits' : undeclared identifier
error C2065: 'numeric_limits' : undeclared identifier
viron вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
long long array[][] запутался Евгений643 Общие вопросы C/C++ 2 17.06.2011 14:17
Необходимо сложить два числа которые больше чем long long snap006 Общие вопросы C/C++ 8 22.12.2010 16:42
Как вывести long double на экран при использование компилятора Intel w_cproc_p_11.1.065 под Visual Studio FPU128bit Visual C++ 9 13.05.2010 10:49
перевод строки в long long и обратно Dimarik Общие вопросы C/C++ 9 16.09.2009 13:27