Přejít na obsah

Manipulace s bity [*****]



  • Pokud chcete odpovědět, přihlaste se
8 odpovědí

#1
Návštěvník

Návštěvník
  • Návštěvníci

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ý.


  • 0



#2
XxM4st3rxX

XxM4st3rxX

    Veteran

  • Uživatel
  • Příspěvků: 881
Chválim ;) 10/10
  • 0

Pawno?


#3
Návštěvník

Návštěvník
  • Návštěvníci
Good :) 10/10
  • 0

#4
Návštěvník

Návštěvník
  • Návštěvníci
10/10 výbornej tut
  • 0

#5
Ondrej Igar

Ondrej Igar

    Mubby

  • Uživatel
  • Příspěvků: 542
Hej luxusný!Tak takhle to vnímá server(počítač)

Je to výborně propracované + vysvětlené!
11/10 !
  • 0

#6
Návštěvník

Návštěvník
  • Návštěvníci
good :) 10/10 ako som vravel nemam čas písať tuty a som rád že sa do toho niekto vrhol :d
  • 0

#7
Návštěvník

Návštěvník
  • Návštěvníci
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.
  • 0

#8
Hrb™

Hrb™

    Marc Wayne "B-Dup"

  • Uživatel
  • Příspěvků: 457
Hezké! 10/10 ! ;)
  • 0

Republic of San Andreas developer

 

http://www.gamesites.cz


#9
Návštěvník Danny-ho 2. účet

Návštěvník Danny-ho 2. účet
  • Návštěvníci
Práve toto som potreboval, Super 10/10.
  • 0





Také označeno jedním nebo více klíčovými slovy: Návod

0 uživatelů si prohlíží toto fórum

0 uživatelů, 0 návštěvníků 0 anonymních uživatelů

© 2015 IPS, Inc.

Zajímat Vás mohou ještě aktuální zprávy. sleviště, slevy dnes Herbalife je skvělou cestou pro dobré zdraví. Je libo dětský web?