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

System heksadecymalny (szesnastkowy)


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

#1 diablix

    emeryt

  • Przyjaciel

Reputacja: 507
Wszechwiedzący

  • Postów:663
  • GG:
  • Steam:steam
  • Imię:Daniel
  • Lokalizacja:Warszawa
Offline

Napisano 24.05.2011 19:18

*
Popularny

Jeżeli był już taki temat to proszę o usunięcie tego, jednak nigdzie tego nie znalazłem Dołączona grafika

Szesnastkowy system liczbowy (czasem nazywany heksadecymalnym, skrót hex) – pozycyjny system liczbowy, w którym podstawą jest liczba 16. Skrót hex pochodzi od angielskiej nazwy hexadecimal. Do zapisu liczb w tym systemie potrzebne jest szesnaście cyfr.

System ten znalazł zastososowanie również w pawnie, jak kompilator wykrywa że jest to system hex? Otóż po tym ze liczba się zaczyna od 0x (można sobie wmówić że x to 16 a po x jest operator mnożenia)

Jak zamienić liczbe w systemie hex na system decymalny (dziesiętny) ?

Bardzo łatwo, naprzykład :

0x14 = 16 * 1 + 4 = 20
0x10 = 16 * 1 + 0 = 16
0x25 = 16 * 2 + 5 = 37


Aby kod wyglądał ciekawiej można zastosować ten system naprzykład w

set_pev(ent, pev_effects, 0x10); // numer efektu = 16


Litery (char / znak) zamiast liczb?


Zamiast liczb możemy również użyć znaków które będą im odpowiadać
Są one w następującej kolejności (wielkość liter jest dowolna)

a = 10
b = 11
c = 12
d = 13
e = 14
f = 15

0xA = 0x10 = 16 * 0 + 10 = 10
0xC = 0x12 = 16 * 1 + 2 = 18
0xFF = 0x1515 = 16 * 15 + 15 = 255
0xAF = 0x1015 = 16 * 10 + 15 = 175

Zastosowanie przykładowe w sma

#include <amxmodx>

#define VERSION "0.1"

new const g_iHEX[] = {
0x14, //20
0x25, //37
0x15, //21
0x05, //5
0x50, //80
0xA, //10
0xFF //255
};

public plugin_init() {
register_plugin("HEX TO DEC", VERSION, "diablix")
register_clcmd("say /test", "cmdHexToDec");
}

public cmdHexToDec(id){
new szMessage[128];
new iMesSize = formatex(szMessage, sizeof szMessage - 1, "Hex : ");

for(new i = 0 ; i < sizeof g_iHEX ; i ++)
iMesSize += formatex(szMessage[iMesSize], (sizeof szMessage - 1) - iMesSize, "%d ", g_iHEX[i]);

set_pev(id, pev_effects, g_iHEX[5]); // 16

client_print(id, 3, szMessage);

return 1;
}

  • +
  • -
  • 12

#2 R3X

    Godlike

  • Przyjaciel

Reputacja: 2 987
Godlike

  • Postów:4 248
  • Lokalizacja:Nie
Offline

Napisano 24.05.2011 19:21

Na pewno się przyda :)

Oprócz tego, że wygląda ciekawie w programach jest łatwy do przeliczenia na system binarny używany przez komputery.

0x12
bierzemy po jednej cyfrze i przeliczamy jej wartość na 4 znakową liczbę binarną
1 = 0001
2 = 0010

0x12 = 00010010B
  • +
  • -
  • 0

#3 DarkGL

    Nie oddam ciasteczka !

  • Administrator

Reputacja: 6 555
Godlike

  • Postów:11 980
  • GG:
  • Steam:steam
  • Imię:Rafał
  • Lokalizacja:Warszawa
Offline

Napisano 24.05.2011 19:24

system szesnastkowy to podstawa : P ułatwia po prostu prace na bitach i po kilku użyciach w programie , łatwo się nim posługuje ; )
  • +
  • -
  • 0

#4 JLB. Leo

    Profesjonalista

  • Zbanowany

Reputacja: 59
Pomocny

  • Postów:180
  • Imię:Paweł
  • Lokalizacja:Bielawa
Offline

Napisano 24.05.2011 19:56

kiedyś programista bez ogarnięcia dwójkowego i szesnastkowego nie był programistą :D dziś już to nie jest aż tak potrzebne, ale bardzo ułatwia życie :)

szczególnie, tak jak Dark wspomniał przy pracy na bitach (gen. bajtach)

#5 G[o]Q

    I'm G[o]Q

  • Przyjaciel

Reputacja: 1 344
Godlike

  • Postów:3 563
  • Steam:steam
  • Imię:Krzysiek
  • Lokalizacja:C: / program Files / Valve / Cstrike / G[o]Q.dem
Offline

Napisano 24.05.2011 20:29

hmm a gdzie opis dostepnych znakow w tym zapisie w tym cos o literach ?

lepszym pomyslem bylo by opisanie ogolnej budowy wiekszosci systemow liczbowych oprocz binarnego i hex jest jeszcze np trojkowy i wiele wiele innych
  • +
  • -
  • 0
Manual ponad wszystko, konsola ponad manual :D :&

Chcesz wysłać do mnie PW ? użyj nazwy GoQ zamiast G[o]Q
Chcesz Kupić moduł płatności via Pukawka,Tserwery, Gamesol, Zabijaka do mojego sklepu? napisz PW cena to tylko 10 zł/sztuka

GG:6022845 (nie pomagam za free osobom ponizej rangi MoD) :D

#6 diablix

    emeryt

  • Autor tematu
  • Przyjaciel

Reputacja: 507
Wszechwiedzący

  • Postów:663
  • GG:
  • Steam:steam
  • Imię:Daniel
  • Lokalizacja:Warszawa
Offline

Napisano 24.05.2011 21:59

hmm a gdzie opis dostepnych znakow w tym zapisie w tym cos o literach ?

lepszym pomyslem bylo by opisanie ogolnej budowy wiekszosci systemow liczbowych oprocz binarnego i hex jest jeszcze np trojkowy i wiele wiele innych


Edytowałem pierwszy post :)
  • +
  • -
  • 0

#7 G[o]Q

    I'm G[o]Q

  • Przyjaciel

Reputacja: 1 344
Godlike

  • Postów:3 563
  • Steam:steam
  • Imię:Krzysiek
  • Lokalizacja:C: / program Files / Valve / Cstrike / G[o]Q.dem
Offline

Napisano 24.05.2011 22:24

nie itd bo sa dozwolone tylko z zakresu 0-f moglbys tez wytlumaczyc ogolna zasade zamiany hex na dec i na odwrot bo w sumie to tak samo jak w binarnym tylko podstawa potegi jest 16 :D
  • +
  • -
  • 0
Manual ponad wszystko, konsola ponad manual :D :&

Chcesz wysłać do mnie PW ? użyj nazwy GoQ zamiast G[o]Q
Chcesz Kupić moduł płatności via Pukawka,Tserwery, Gamesol, Zabijaka do mojego sklepu? napisz PW cena to tylko 10 zł/sztuka

GG:6022845 (nie pomagam za free osobom ponizej rangi MoD) :D

#8 dram

    Wszechwidzący

  • Użytkownik

Reputacja: 16
Początkujący

  • Postów:277
  • Lokalizacja:xxxx
Offline

Napisano 25.05.2011 06:15

Mhm... Ale w pawnie to tylko ten system "hex" przydatny był do operacji na plikach... Natomiast w pozostałych czynnościach nie widze zastosowania...

Zamiast zamieniać: 16 na system hex(0x10) To wolałbym po prostu użyć szestnastki...

po 1. Jest prościej
po 2. Jest szybciej.

set_pev(ent, pev_effects, 0x10); // numer efektu = 16

Lub

set_pev(ent, pev_effects, 16); // numer efektu = 0x10

Co jest szybsze?

Może jest jeszcze jakieś inne zastosowanie w amxx tego systemu.
  • +
  • -
  • 0
Co oferuje?

Pisanie pluginów amxx/modow itd
Skryptow php

Kontakt na PW LUB GG

#9 DarkGL

    Nie oddam ciasteczka !

  • Administrator

Reputacja: 6 555
Godlike

  • Postów:11 980
  • GG:
  • Steam:steam
  • Imię:Rafał
  • Lokalizacja:Warszawa
Offline

Napisano 25.05.2011 14:19

Jest prościej ? - zalezy dla kogo : ) dla mnie nie ma roznicy
Może jest jeszcze jakieś inne zastosowanie w amxx tego systemu. - > praca na plikach : D?
  • +
  • -
  • 0

#10 JLB. Leo

    Profesjonalista

  • Zbanowany

Reputacja: 59
Pomocny

  • Postów:180
  • Imię:Paweł
  • Lokalizacja:Bielawa
Offline

Napisano 25.05.2011 14:21

szybsze? może szestnastoko jest o nanosekundy szybciej (chociaż i tak to wszystko jest przekładane na dwójkowy ;F )

ale dla Ciebie może być o wiele szybciej ogarnąć zwykłe liczby... dlatego polecam dziesiętnym

#11 R3X

    Godlike

  • Przyjaciel

Reputacja: 2 987
Godlike

  • Postów:4 248
  • Lokalizacja:Nie
Offline

Napisano 25.05.2011 14:29

Różnicy w czasie wykonania nie ma żadnej, wszystkie liczby są przeliczane na binarne już w trakcie kompilacji. Z prostotą używania hexa można dyskutować: bardziej czytelne jest 0xffffffff czy -1? zależy od zastosowania :)
  • +
  • -
  • 0

#12 DarkGL

    Nie oddam ciasteczka !

  • Administrator

Reputacja: 6 555
Godlike

  • Postów:11 980
  • GG:
  • Steam:steam
  • Imię:Rafał
  • Lokalizacja:Warszawa
Offline

Napisano 25.05.2011 14:29

raczej chodziło mu o to że szybciej się posługuje dziesiątkowym niż szesnastkowym
  • +
  • -
  • 1

#13 Svizz

    Zaawansowany

  • Użytkownik

Reputacja: 33
Życzliwy

  • Postów:142
  • GG:
  • Imię:Svizz
  • Lokalizacja:Polska :)
Offline

Napisano 25.05.2011 15:13

Pytanie nooba - czy da się w .sma użyć liczby binarnej? Skoro

wszystkie liczby są przeliczane na binarne już w trakcie kompilacji

, to można oszczędzić trochę pamięci i zapisać od razu w binarnym.
  • +
  • -
  • 0

#14 R3X

    Godlike

  • Przyjaciel

Reputacja: 2 987
Godlike

  • Postów:4 248
  • Lokalizacja:Nie
Offline

Napisano 25.05.2011 15:24

trochę offtop, ale rozmawiamy o różnych systemach liczbowych, więc niech będzie
nic nie oszczędzasz w ten sposób, ale można:
log_amx("2=%d", 0b10);

  • +
  • -
  • 0

#15 Owner123

    Wszechpomocny

  • Użytkownik

Reputacja: 146
Zaawansowany

  • Postów:331
  • Lokalizacja:Barty ;]
Offline

Napisano 01.06.2011 19:42

log_amx("2=%d", 0b10);

A nie wystarczy dodać "0" przed cyfrę?
np. 01001 = 9
Tak jest przynajmniej w C++. (Albo coś mi bania świruję)

Co do tutka mam jedno zastrzeżenie.

0xA = 0x10 = 16 * 1 + 0 = 16
0xC = 0x12 = 16 * 1 + 2 = 18

Zamiast 0xA piszę się 0x0A aby uniknąć wpadek, przy pisaniu że dopiszemy 0 (0xA0) i wtedy mamy cyfrę 16x wiekszą.
A poza tym wszystko git :)

Użytkownik Owner123 edytował ten post 01.06.2011 19:45

  • +
  • -
  • 0

#16 Knopers

    Nie patrz tak na mnie !

  • Przyjaciel

Reputacja: 588
Wszechwiedzący

  • Postów:2 013
  • GG:
  • Steam:steam
  • Imię:Mateusz
  • Lokalizacja:Cz-wa
Offline

Napisano 01.06.2011 19:51

Zamiast 0xA piszę się 0x0A aby uniknąć wpadek, przy pisaniu że dopiszemy 0 (0xA0) i wtedy mamy cyfrę 16x wiekszą.
A poza tym wszystko git

Nie ma możliwości że będzie aż taka pomyłka, zawsze zera są dopisywane po lewej stronie. Przynajmniej tego mnie w szkole uczą xP
  • +
  • -
  • 0

#17 G[o]Q

    I'm G[o]Q

  • Przyjaciel

Reputacja: 1 344
Godlike

  • Postów:3 563
  • Steam:steam
  • Imię:Krzysiek
  • Lokalizacja:C: / program Files / Valve / Cstrike / G[o]Q.dem
Offline

Napisano 01.06.2011 19:55

ale kazde 0 w srodku zwieksza nam wynik 16x tylko 0 z lewej nic nie zmieni zas z prawej tez zwiekszy wynik 16x

A nie wystarczy dodać "0" przed cyfrę?
np. 01001 = 9
Tak jest przynajmniej w C++. (Albo coś mi bania świruję)


moglbys napisac co masz na mysli ? bo napisales tak ze nikt tego nie zrozumie raczej
  • +
  • -
  • 0
Manual ponad wszystko, konsola ponad manual :D :&

Chcesz wysłać do mnie PW ? użyj nazwy GoQ zamiast G[o]Q
Chcesz Kupić moduł płatności via Pukawka,Tserwery, Gamesol, Zabijaka do mojego sklepu? napisz PW cena to tylko 10 zł/sztuka

GG:6022845 (nie pomagam za free osobom ponizej rangi MoD) :D

#18 Knopers

    Nie patrz tak na mnie !

  • Przyjaciel

Reputacja: 588
Wszechwiedzący

  • Postów:2 013
  • GG:
  • Steam:steam
  • Imię:Mateusz
  • Lokalizacja:Cz-wa
Offline

Napisano 01.06.2011 20:09

chodzi mu o to że 01001 == 0b1001. ale tak nie jest bo 01001 == 1001 :P
  • +
  • -
  • 0

#19 R3X

    Godlike

  • Przyjaciel

Reputacja: 2 987
Godlike

  • Postów:4 248
  • Lokalizacja:Nie
Offline

Napisano 01.06.2011 20:42

w C++ zero na początku oznacza system ósemkowy xD
  • +
  • -
  • 0

#20 Owner123

    Wszechpomocny

  • Użytkownik

Reputacja: 146
Zaawansowany

  • Postów:331
  • Lokalizacja:Barty ;]
Offline

Napisano 01.06.2011 20:54

ale kazde 0 w srodku zwieksza nam wynik 16x tylko 0 z lewej nic nie zmieni zas z prawej tez zwiekszy wynik 16x


Oj chyba nie. Przeskakując na system dziesiątkowy, jak mamy 2 i dopiszemy z prawej 0 (będzie 20) to będziemy mieli cyfrę 10x wiekszą, a jak z lewej to nic nie zmieni. To samo w szesnastkowym, tyle że cyfrę zwiększamy 16 razy.

w C++ zero na początku oznacza system ósemkowy xD


Idę się leczyć ...
  • +
  • -
  • 0




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

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