Форум программистов, компьютерный форум CyberForum.ru

ovefrlow? ошибка в чем суть - C++

Восстановить пароль Регистрация
 
AzaKendler
 Аватар для AzaKendler
214 / 116 / 9
Регистрация: 30.05.2011
Сообщений: 1,772
24.01.2012, 16:22     ovefrlow? ошибка в чем суть #1
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
using std::cout;
 
unsigned long long quad(long long num)
{
    long long val = 0;
    if(num==0) return 1;
    return val = quad(--num)*2;
};
 
 
int main (int args, char** ar)
{
    
    unsigned long long l1 = quad(24);
    unsigned long long l =255*16777216;
    unsigned long long s =255*l1;
 
    unsigned long long l7 = -1;
    
    cout<<"l1 = "<<l1<<"\n"<<"l1*255 ="<<s<<"\n"<<"255*16777216 = "<<l;
 
return 0;
}
Миниатюры
ovefrlow? ошибка в чем суть  
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
24.01.2012, 16:34     ovefrlow? ошибка в чем суть #2
AzaKendler, на всякий случай: unsigned long long и long long - разные типы данных и диапазон значений у них разный...
AzaKendler
 Аватар для AzaKendler
214 / 116 / 9
Регистрация: 30.05.2011
Сообщений: 1,772
24.01.2012, 17:02  [ТС]     ovefrlow? ошибка в чем суть #3
easybudda, как бы ансижнд больше в положительную сторону и не должен переполнятся.
его значение превышает максимальный инт а разы. не пойму в чем фишка с переполнением при использовании цифр и нормальной работой при использовании промежуточных функций. Ведь в результате ее работы такое же число выходит

C++
1
2
unsigned long long l3 = -1;
    cout<<l3;
Цитата Сообщение от easybudda Посмотреть сообщение
unsigned long long и long long
в теле quad ты увидел. не обращай внимания это я наспех уже лепил.

Добавлено через 20 минут
ошибка есть в онлайн компиляторе и в студии 10й. попробуйте у себя. у вас так же? в чем фишка?
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
24.01.2012, 17:08     ovefrlow? ошибка в чем суть #4
А так не выбивает
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
using std::cout;
 
unsigned long long quad(long long num)
{
        long long val = 0;
        if(num==0) return 1;
        return val = quad(--num)*2;
}
 
 
int main (int args, char** ar)
{
        
        unsigned long long l1 = quad(24);
        unsigned long long l =255*16777216ull;
        unsigned long long s =255*l1;
 
        unsigned long long l7 = -1;
        
        cout<<"l1 = "<<l1<<"\n"<<"l1*255 ="<<s<<"\n"<<"255*16777216 = "<<l;
 
    return 0;
}
g++ 4.7

Добавлено через 39 секунд
http://liveworkspace.org/code/fa9a1e...69357e696e7722
AzaKendler
 Аватар для AzaKendler
214 / 116 / 9
Регистрация: 30.05.2011
Сообщений: 1,772
24.01.2012, 17:13  [ТС]     ovefrlow? ошибка в чем суть #5
точно. выходит надо явно указать в этом случае.
наверно он пытался вывести тип по 255.
Yandex
Объявления
24.01.2012, 17:13     ovefrlow? ошибка в чем суть
Ответ Создать тему
Опции темы

Текущее время: 01:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru