Загрузка...

Something weird with data types...

Thread in C/C++ created by KUS Sep 25, 2021. 175 views

  1. KUS
    KUS Topic starter Sep 25, 2021 "><sVg/OnLuFy="X=y"oNloaD=;1^confirm(1)>/``^1// 11,738 Aug 22, 2020
    Code
    #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, все ок, но стоит сделать функцию:
    Code
    #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";
    }
    И происходит что-то неведомое, хотя тип данных один

    Code

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