Jump to content

návod Manipulace s bity [*****]


Guest Mort

Recommended Posts

Manipulace s bity

Obtížnost: :5:

Obsah:

  • Co je to bit a bitové číslo (binárka)
  • Bitové operace

Co je to Bit a bitové číslo:

,,Binárka'' je číselná soustava, která používá dva jedinečné symboly - Jedničky a nuly.
My v pawn budeme používat dvojkovou soustavu né desítkovou.
Možná že se vám může zdát že je toto zbytečné, není nutné znát ale v každodenním životě jej používáme, možná o tom ani nevíte. Když třeba zapínáte elektřinu, udělají to za vás jedničky a nuly. Bez nich by všechny naše technologie nemohli existovat a hlavně je binárka důležitá pro ty, kteří se zajímají o počítače.

Bit je základní jednotka informace. Možná že jste už slyšeli někde, že v pawn používáme 32bitové proměnné. Opravdu je tomu tak. Kdybychom použíívali 1bit proměnné tak bychom měli pouze dvě možnosti - 1 a 0. Aneb říká se tomu logická proměnná nebo-li boolean. Ale tím se teď nebudu zabývat.
8 bitů odpovídá jednomu bajtu. Tudíž můžeme říci že mám 4 bajtovou proměnnou.

Př.:

new test;

ZAJÍMAVOST: proměnná zabírá přesně 0,000000004 GB

Zjistili jsme co je bit, teď se dostávám k bitovému číslu.
Možná jste už viděli pokročilejší script kde jste objevili př.:



0b00011010

Tohle je bitové číslo. V pawn ho takto zapisujeme. Tato bitová hodnota se rovná číslu 26. Chtěli by jste vědět, jak jsem se k tomuto číslu dostal?
Jednoduše, zapnul jsem kalkulačku na Win7 a přepl na režim programátorská :d.
Ale dá se udělat zkouška.

Smažeme první dva charaktery aneb 0b

Dostaneme číslo 00011010
A začneme počítat.

Hodnota * 2 * pořadí číslice (začínáme od 0)
S prvním číslem nemusíme nic dělat.
První číslo: 0 (0 * 2 * 0) = 0
Druhé číslo: 0 (0 * 2 * 1) = 0
Třetí číslo: 0 (0 * 2 * 2) = 0
Čtvrté číslo: 1 (1 * 2 * 3) = 6
Páté číslo: 1 (1 * 2 * 4) = 8
Šesté číslo: 0 (0 * 2 * 5) = 0
Sedmé číslo: 1 (1 * 2 * 6) = 12
Osmé číslo: 0 (0 * 2 * 7) = 0

A teď všechny hodnoty sečteme

0+0+0+6+8+0+12+0 = 26

Je to jednoduché.

Nyní vám ukážu jak z čísla 26 vytvořit binární číslo. Postup je jednoduchý, jen ho pochopit.

26 % 2 = 0 Zbytek: 13
13 % 2 = 1 Zbytek: 6,5 (Zaokrouhlíme na 6)
6 % 2 = 0 Zbytek: 3
3 % 2 = 1 Zbytek: 1,5 (Zaokrouhlíme na 1)
1 % 2 = 1 Zbytek: 0,5 (Zaokrouhlíme na 0)

Získáme binární číslo (shora dolů): 01011(000)
Ale musíme nyní všechny čísla obrátit!!!!
Získáme nyní číslo: 00011010

Čísla souhlasí :).

Doufám že už tyhlety Jednoduché věci chápete.



Bitové operace:

Samozřejmě musí být pro práci s bity i nějaké operace, no a taky jsou. Máme jich celkem 7:

 

  • Aritmetický bitový posun doleva <<
  • Aritmetický bitový posun doprava >>
  • Logický posun doprava >>>
  • Logický AND (logický součin) &
  • Logický OR (logický součet) |
  • Logický exklusivní součet ^
  • Bitová negace ~



Aritmetický bitový posun doleva <<:

Použití: x << y

Aritmetický posun doleva posune bitové čísla x o y míst doleva a zprava se doplní nuly.

Př.:
 
00001111 // 15

<<

2



=



00111100 //60 �
00100011 // 35

<<

1



=



01000110 // 70 �

Vztah pro výpočet bitového posunu doleva: x << y = x * 2^y

Můžeme počítat i dvojnásobek nějakého čísla pomocí bitového posunu. Je to rychlejší než násobení *2

Viz.:

#define DvaKrat(%0) (%0 << 1) �




Aritmetický posun doprava >>

Použití: x >> y

Posuneme bitové čísla x o y míst. Z levé strany se doplní nuly.

Př.:
00001100 // 12

>>

2



=



00000011 // 3 �
01001000 // 72

>>

3



=



00001001 // 9 �

Vztah pro výpočet bitového posunu doprava: x >> y = x / 2^y




Logický posun doprava >>>

Je to opak posunu aritmetického levého. >>> posune nulu na první pozici vlevo.

Př.:
 
01001101 // 77

>>>

2



=



00010011 // 19 �
11111111111111111111111111111000 // -8

>>>

1



=



011111111111111111111111111111000 // 2147483644 �




Logický součin (&) (AND)

Logický součin nám vynásobí všechny jedničky a nuly podle toho jak jdou za sebou.

x & y = x (bitové číslo) & y (čím to máme vynásobit)

Př.:
00010001 // 17

&

00001100 // 12



=



00000000 // 0



/////////////

00010001

00001100

________

00000000

Tudíž: 17 & 12 = 0

Nevěříte? Zkuste si to

Ještě jeden příklad aby jste lépe pochopili
 

01110111 // 119

&

000000100 // 2



=



00000100 // 2



/////////////

01110111

00000100

________

00000100




Logický součet (|) (OR):

Doufám že všichni ví že součet je +. Jako u součinu sčítáme čísla pod sebou a nelekněte se jedné věci:
Pokud narazíme že se nachází 1 + 1 = 2

!!!! NE, 1 + 1 u bitového součtu se rovná jedné !!!!

Př.:
 
01010101 // 85

|

00100000 // 32



=



01110101 // 117



///////////////

01010101

00100000

________

01110101
00010001 // 17

|

01111111 // 127



=



01111111 // 127



///////////////

00010001

01111111

________

01111111




Logický exklusivní součet (^):

Exklusivní součet je podobný jako obyčejný logický součet, jenže s tou výjimkou že !!!!!! 1 + 1 = 0 !!!!!!

Př.:
 
00100000 // 32

^

00100000 // 32



=



00000000 // 0



////////////////////

00100000

00100000

________

00000000
00111111 // 63

^

00101010 // 42



=



00010101 // 21



/////////////////

00111111

00101010

________

00010101




Bitová negace ~:

Narozdíl od všech ostatních operátorů má pouze jeden operand.
Tudíž neděláme toto: 17 ~ 11
Ale jen toto: ~17

Z nuly je jednička a z jedničky je nula ...

Př.:
 
~

00010110�//�22



=



11101001�//�(-23)



/////////////////////

00010110

________

11101001

~

00000001�//�1

�

=



11111110�//�-2



/////////////////



00000001

________

11111110

------------------------------------------------------------------------------


Tak doufám že se Vám TuT líbil a že jste si něco nového přinesli. Je mi jasné že to hned napoprvé nepochopíte (já se to učil sám víceméně měsíc).

Mort.

 

Ověřený návod

Tento návod prošel validací, a lze ho proto považovat za ověřený.

Link to comment
Share on other sites

Jen bych ještě rád upozornil že pokud chceme vložit do pawn binární číslo tak použijeme

0b(číslo). To je označení pro to číslo, pokud tam totiž nebudete mít 0b tak to pawn může brát jako normální číslo př. (00010001) = 10001. Při použití 0b si to pawno překonvertuje na číslo 17.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...