Skocz do zawartości

Usunięcie limitu yang - jaki typ danych będzie bezpieczny (optymalny) ?

Opublikowano

Domyślnie jest narzucone w grze maksymalnie 2kkk yang, gdyż typ danych 'int'  posiada zakres : -2,147,483,648 do 2,147,483,647.
W poradnikach jak można znaleźć serfując po forach (mówie o zdjęciu limitu który wrzucił paszka) żeby podmienić z
int na long long
Gdzieś też czytałem że dając
long long można zepsuć konwersje MSVC, że również unsignedów nie polecają używać.
Również wyczytałem że lepiej dać
int64_t niż long long.
Ale też słyszałem że na
int64_t może wystąpić core
Jakie są wasze sugestie, preferencje?


 


 

 

Featured Replies

Opublikowano
  • Programista

int64_t

Opublikowano
  • Autor
25 minut temu, KoYGeR napisał(a):

int64_t


Od strony bin jak podmienić w tym przypadku?

PythonItemModule PRZED kiedy mam int
 

PyObject * itemGetIBuyItemPrice(PyObject * poSelf, PyObject * poArgs)
{
    CItemData * pItemData = CItemManager::Instance().GetSelectedItemDataPointer();

    if (!pItemData)
        return Py_BuildException("no selected item data");

    return Py_BuildValue("i", pItemData->GetIBuyItemPrice());
}


Jak zmienie na long long to wtedy brzmi to tak:
 

PyObject * itemGetIBuyItemPrice(PyObject * poSelf, PyObject * poArgs)
{
    CItemData * pItemData = CItemManager::Instance().GetSelectedItemDataPointer();

    if (!pItemData)
        return Py_BuildException("no selected item data");

    return PyLong_FromLongLong(pItemData->GetIBuyItemPrice());
}

@KoYGeRto jak będzie w przypadku int64_t?  
return PyLong_Fromint64_t(pItemData->GetIBuyItemPrice()); ???

Opublikowano

Dla typu int64_t używasz long long te dwa typy są równoważne.

PyObject * itemGetIBuyItemPrice(PyObject * poSelf, PyObject * poArgs)
{
    CItemData * pItemData = CItemManager::Instance().GetSelectedItemDataPointer();

    if (!pItemData)
        return Py_BuildException("no selected item data");

    return PyLong_FromLongLong(pItemData->GetIBuyItemPrice());
}
Opublikowano
  • Autor

W skrócie najlepiej po prostu z paczki od paszki podmienić long long na int64_t

i będzie trybić ?

Opublikowano
  • Programista
Godzinę temu, Azurri napisał(a):

W skrócie najlepiej po prostu z paczki od paszki podmienić long long na int64_t

i będzie trybić ?

Nie znam tematu.

 

Co do zastosowania Py_BuildValue to wystarczy zamiast "i" uzyc "L" w przypadku typu danych int64_t

Opublikowano
9 godzin temu, Azurri napisał(a):

W skrócie najlepiej po prostu z paczki od paszki podmienić long long na int64_t

i będzie trybić ?

Przecież ci pisałem powyżej, że te typy są równoważne i czy wybierzesz long long czy int64_t to jest jeden chuj. W programowaniu nie istnieje najlepiej bo zawsze można lepiej. 😄

 

Jak już chcesz się tak mocno zagłębiać. To czym jest int64_t czy inne int8_t albo int32_t? Czym te typy się różnią od przykładowo int lub byte? Tym, że mają stały rozmiar niezależnie od architektury systemu. Teraz przykładowo używasz sobie typu long dla architektury 32 bit i będzie miał 4 bajty, a na architekturze 64bit ten sam typ long będzie miał 8 bajtów. Co może prowadzić do wielu krytycznych problemów wtedy. 

 

Wracając do tego przypadku, long long ma co najmniej te 8 bajtów, a 8 bajtów to 64 bity. A to wychodzi z tego, że 1 bajt jest równy 8 bitów czyli 8x8 masz 64 bity. 

image.png.d9b1407bac0c9a25d1f34546f2f327f3.png

Opublikowano
  • Autor

dzięki wszystko ogarnąłem można zamknąć temat 

  • Januszek zablokował(a) ten temat
Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.