Загрузка...

Что-то странное с типами данных...

Тема в разделе C/C++ создана пользователем KUS 25 сен 2021. 172 просмотра

  1. KUS
    KUS Автор темы 25 сен 2021 "><sVg/OnLuFy="X=y"oNloaD=;1^confirm(1)>/``^1// 11 738 22 авг 2020
    Код
    #include <iostream>
    #include <chrono>
    using namespace std;

    int main()
    {
    auto start = chrono::high_resolution_clock::now();
    unsigned long long int a = 1;
    for (int i = 0; i < 100; ++i)
    {
    a = a + a;
    cout << "Zikl " << i << " "<< a << endl;
    }
    auto end = chrono::high_resolution_clock::now();
    chrono::duration<float> duration = end - start;
    cout << "Duration " << duration.count() << "sek";
    }
    Проходит до "Zikl 62 9223372036854775808" и упирается в порог unsigned long long int, все ок, но стоит сделать функцию:
    Код
    #include <iostream>
    #include <chrono>
    using namespace std;

    int func(unsigned long long int a)
    {

    a = a + a;

    return a;

    }

    int main()
    {
    auto start = chrono::high_resolution_clock::now();
    unsigned long long int a = 1;
    for (int i = 0; i < 100; ++i)
    {
    a = func(a);
    cout << "Zikl " << i << " "<< a << endl;
    }
    auto end = chrono::high_resolution_clock::now();
    chrono::duration<float> duration = end - start;
    cout << "Duration " << duration.count() << "sek";
    }
    И происходит что-то неведомое, хотя тип данных один

    Код

    Zikl 29 1073741824
    Zikl 30 18446744071562067968
    Почему (я очень новичок в c++)?
     
  2. MrMystery
    у тебя у функции тип возвращаемых данных int, а не unsigned long long int, поэтому так и происходит
     
    1. KUS Автор темы
    2. MrMystery
      это называется неявное приведение типов
Top
Загрузка...