W jaki sposób jest liczona 1 sekunda z (1<<12) w wiadomości ScreenFade ?
Skoro (1<<12) to 1 sekunda to w jaki sposób zapisać w postaci (1<<X) np. 0.5s lub 0.25s ?
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.
|
Napisano 21.05.2018 16:33
W jaki sposób jest liczona 1 sekunda z (1<<12) w wiadomości ScreenFade ?
Skoro (1<<12) to 1 sekunda to w jaki sposób zapisać w postaci (1<<X) np. 0.5s lub 0.25s ?
Napisano 21.05.2018 17:50
W jaki sposób jest liczona 1 sekunda z (1<<12) w wiadomości ScreenFade ?
Skoro (1<<12) to 1 sekunda to w jaki sposób zapisać w postaci (1<<X) np. 0.5s lub 0.25s ?
W sumie to i ja bardzo nie wiem Ale idąc logicznym tokiem myślenia to skoro 1<12 to 1s, 1<6 0.5s a 1<3 to 0.25s, ale tak jak mówię nie jestem pewien czy dobrze to rozszyfrowałem. Możliwe że palnąłem tu niesamowitego byka
Napisano 21.05.2018 21:32
@UP
Owszem, dość okazały byk 1<<x oznacza przesunięcie bitowe '1' o x miejsc w lewo. Rozchodzi się oczywiście o operacje na bitach:
0000 = 0*23 + 0*22 + 0*21 + 0*20 = 0+0+0+0 = 0
0001 = 0*23 + 0*22 + 0*21 + 1*20 = 0+0+0+1 = 1
0010 = 0*23 + 0*22 + 1*21 + 0*20 = 0+0+2+0 = 2
0011 = 0*23 + 0*22 + 1*21 + 1*20 = 0+0+2+1 = 3
...
1000 = 1*23 + 0*22 + 0*21 + 0*20 = 8+0+0+0 = 8
[...]
1<<0 jest równoznaczne zapisowi: 0001 = 1
1<<1: 0010 = 2
1<<2: 0100 = 4
1<<3: 1000 = 8
Sprawdźmy 1<<6, w tym celu należy ową '1' przesunąć o 6 miejsc w lewo.
Sytuacja początkowa: 0000 0001
Po przesunięciu: 0100 0000 = 26 = 64
Następnie sprawdzamy 1<<12:
Sytuacja początkowa: 0000 0000 0000 0001
Po przesunięciu: 0001 0000 0000 0000 = 212 = 4096
Skoro 1s = 1<<12 = 4096, to 0.5s = 4096/2, czyli 2048 - inaczej 1<<11, a nie 1<<6
Istnieją poradniki przybliżające pojęcie systemów liczbowych (i wszelkich cudów z nimi powiązanych), dlatego nie będę się rozwodził na ten temat.
Wracając do tematu - można w łatwy sposób przypisać makro obliczające czas dla 'ludzkich' danych wejściowych:
#define bitfloatvalue(%1) floatround((%1)*(1<<12))
Użycie:
bitfloatvalue(1.0) // 1 sekunda bitfloatvalue(0.5) // pół sekundy
Źródło: https://amxx.pl/topi...ia/#entry546427
Użytkownik _McHappy edytował ten post 21.05.2018 21:39
0 użytkowników, 0 gości, 0 anonimowych