Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

Liczby większe niż 2^32


  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
4 odpowiedzi w tym temacie

#1 csMaster

    Wszechwiedzący

  • Power User

Reputacja: 14
Początkujący

  • Postów:542
  • Lokalizacja:localhost
Offline

Napisano 21.05.2022 15:34

Czy jeśli napiszę coś takiego:

new liczba = (1<<40);

Czy w zmiennej 'liczba' zostanie zapisana liczba 2^40 - czyli 1 099 511 627 776 ? To oczywiście więcej niż wynosi limit 32-bitowych zmiennych.

 

Jeśli nie to ogólnie czy jest jakiś sposób żeby zapisywać tak duże liczby ? Nie mówię o ich wyświetlaniu czy operacjach matematycznych, a tylko o zapisywaniu i operacjach bitowych. Celem tego miałoby być zapisywanie danych bez tworzenia tablic dynamicznych, np. przy zapisie skinów jakie ma gracz - 40 kolejnych bitów oznaczałoby 40 kolejnych skinów.

 


  • +
  • -
  • 0

#2 Engi

    [EKSiD] playaz44

  • Power User

Reputacja: 315
Wszechpomocny

  • Postów:1 071
  • GG:
  • Imię:Seba
  • Lokalizacja:Praga
Online

Napisano 21.05.2022 16:21

Nie wiem jak z przeliczaniem tego ale co zapisać to jako string, a nie int?
  • +
  • -
  • 0
Użytkowniku! Zanim napiszesz wiadomość wiedz, że:

W odpowiedzi na ten status, przejrzałem kilka ostatnich Twoich postów i dodałem Ci kolejne 3 punkty ostrzeżeń. Mam nadzieję, że pomogłem.

1:0 dla Benia :D
Nie pomagam za darmo na pw.

#3 csMaster

    Wszechwiedzący

  • Autor tematu
  • Power User

Reputacja: 14
Początkujący

  • Postów:542
  • Lokalizacja:localhost
Offline

Napisano 21.05.2022 18:24

Też dobry pomysł, ale i tak musiałbym znać długość tego stringa. Jeśli nie wiem wstępnie ile danych miałoby być w ten sposób zapisanych, to ten sposób odpada.

Poza tym jeśli miałbym do zapisania 100 wyników typu true/false, to ich zapisanie zabrałoby 400 bajtów, a gdyby użyć pojedynczych bitów ze zmiennych to byłoby to 100 bitów, czyli potrzebne byłyby tylko 4 zmienne = 16 bajtów.


  • +
  • -
  • 0

#4 Engi

    [EKSiD] playaz44

  • Power User

Reputacja: 315
Wszechpomocny

  • Postów:1 071
  • GG:
  • Imię:Seba
  • Lokalizacja:Praga
Online

Napisano 21.05.2022 21:08

Znalazłem ten kod na alliedach, podobno działa:

save(x)
{
    holder[x / 32] |= 1 << (x % 32);
}

exists(x)
{
    return holder[x / 32] & 1 << (x % 32);
}

remove(x)
{
    holder[x / 32] &= ~(1 << (x % 32))
}
https://forums.allie...53&postcount=49


Jeszcze to jest też jakimś rozwiązaniem:

https://forums.allie...19&postcount=94


Użyłem kodu grankee z tutka z operacji bitowych i na chama wpisałem tam jabłka o wartości 40, 42 i 44, plugin się skompilował bez żadnego błędu ale nie mam jak przetestować w praktyce.
  • +
  • -
  • 1
Użytkowniku! Zanim napiszesz wiadomość wiedz, że:

W odpowiedzi na ten status, przejrzałem kilka ostatnich Twoich postów i dodałem Ci kolejne 3 punkty ostrzeżeń. Mam nadzieję, że pomogłem.

1:0 dla Benia :D
Nie pomagam za darmo na pw.

#5 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 23.05.2022 18:08

To dobre jest ^ . Trzymanie jako string to najgorsza opcja.

 

Swojego czasu chciałem napisać bibliotekę właśnie do takich liczb, ale nigdy nie wyszło nic konkretnego.

Problemy też jakie napotkałem przy myśleniu o tym rozwiązaniu to brak kompatybilności praktycznie ze wszystkim co przyjmuje liczbę całkowitą :( Co oznacza, że trzeba reimplementować jakieś funkcje np. zapisujące integer do pliku. Swoją drogą pewnie można by dorobić moduł do AMXXa (coś jak json module), wziąć kod jakichś BigIntegerów napisany w C/C++, owrapować natywami i wystawić do użytku w pluginach, ale komu by się chciało.... :)


  • +
  • -
  • 1




Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych