Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
2 / 2 / 2
Регистрация: 20.02.2014
Сообщений: 34
1

Вроде переполнение, а вроде бы и нет

18.09.2014, 17:15. Показов 587. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
День добрый! Интересует, почему си не дает мне сделать следующую штуку.

C++
1
2
    int a = 4999998848;
    cout << a*2 << endl;
По логике, никакого переполнения нет. Ведь я не присваиваю a = a * 2, нет, я вывожу. Но ответ выдается "1410063104". Сразу тогда приходит в голову мысль, что a * 2 хранится во временной памяти. Так ли это на самом деле?
Если а сделать long long, то все работает нормально. Почеиу же с int'ом не катит?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.09.2014, 17:15
Ответы с готовыми решениями:

Пропадает интернет - вроде он есть, а вроде его нет
Приветствую друзья. Собственно вчера все началось. Сижу в ФФ 28.0. Через какое-то время...

Непонятки с видеокартой-вроде и пашет, а вроде и нет
В общем такая штука-была у меня раньше старая карточка matrox millenium g550.и рещшил я ее...

HTML-форма, вроде просто, а вроде и нет
Уважаемые форумчане, помогите пожалуйста! Есть HTML-таблица с формой:...

Вроде база есть, а вроде её нет
Здравствуйте, загрузил сайт, загрузил базу. Картина получается вот такая - realt-plus.ru В...

2
Native x86
Эксперт Hardware
5514 / 3273 / 934
Регистрация: 13.02.2013
Сообщений: 10,423
18.09.2014, 17:22 2
Цитата Сообщение от ferc Посмотреть сообщение
Почеиу же с int'ом не катит?
Потому что под результат резервируется тот же тип данных, что и a. Возможно сработает такой вариант:
C
1
2
int a = 4999998848;
cout << (long long)a*2 << endl;
1
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
18.09.2014, 17:41 3
Цитата Сообщение от ferc Посмотреть сообщение
a * 2
имеет возвращаемый тип int в int столько не помещается, следовательно старшие байты отбрасываются, а младшие выводятся

Добавлено через 1 минуту
более того эта опреация
Цитата Сообщение от ferc Посмотреть сообщение
int a = 4999998848;
т.ж отбрасывает байты потому что int max = 2147483647

Добавлено через 3 минуты
даже так получается
C++
1
int a = 4999998848;//1 0010 1010 0000 0101 1110 1101 1000 0000
старший байт не влез его отбросили и получили
//0010 1010 0000 0101 1110 1101 1000 0000 = 705031552, умножили на 2 получили 1410063104, все верно
1
18.09.2014, 17:41
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.09.2014, 17:41
Помогаю со студенческими работами здесь

Вроде элементарная задача ан - нет. Нет такой функции!?
Как представить целое число в виде строки его двоичного представления?

Вроде нет его но он есть
Если кто-то встречался с подобным - помогите чайнику! Дело в том что распаковав rar-архив винраром...

Тормозит компьютер, вирусов вроде нет
Добрый день! Прошу помочь, тормозит компьютер, авастом и др. веб кьюр ит проверял, ничего не...

Ошибки вроде бы нет, но работает не правильно!
Христос Воскресе! Вот код: #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;clocale&gt; #include...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru