Forum Forum ZKP Strona Główna

Programowanie - wszystko o działaniu na bitach

 
Napisz nowy temat   Odpowiedz do tematu    Forum Forum ZKP Strona Główna -> Poradniki
Autor Wiadomość
Razi
Książe postów
Książe postów



Dołączył: 17 Sie 2006
Posty: 936
Przeczytał: 0 tematów

Ostrzeżeń: 0/5

PostWysłany: Śro 16:04, 27 Lut 2008    Temat postu: Programowanie - wszystko o działaniu na bitach

Bit - najmniejsza porcja informacji w informatyce. Może przyjąć wartość 0, albo 1 (jest ładunek, albo nie ma).
Bajt - porcja 8 bitów. Jeden znak w ANSII zajmuje 8 bitów, dlatego tak to się przyswoiło.

Tutaj przedstawię podstawowe działania na bitach, innych nie trzeba umieć


Wygląd:
Kod:
DEC > BIN
0         0000 0000
1         0000 0001
2         0000 0010
3         0000 0011
4         0000 0100
5         0000 0101
6         0000 0110
7         0000 0111
8         0000 1000
255     1111 1111


Jak łatwo zauważyć, oddzielam po 4 bity. jest to związane z czytelnością i przerabianiem na tryb szesnastkowy

Komputer wszystko robi na bitach, nawet odtwarza dźwięk i rysuje grafikę. Dla programisty przydatna jest znajomość tego.

Dec >> Bin
Są 2 sposoby:
1. Dzielenie przez 2 i sprawdzanie reszty. chyba najszybszy.
np. liczba 5:
Kod:

5
2 |1
1 |0
1 |1

konkretnie: dzielisz na 2. Jeżeli jest reszta 1, zapisz, jak nie ma to napisz 0. I dziel aż uzyskasz 1. Potem to co ci wyjdzie, to końcówka kodu binarnego(to co na górze, jest po prawej stronie). 1/2=reszta jest 1
Czyli 5=0000 0101

2. Brutalniejszy... Zapisać se całą tablicę bajta
Dla 1 bajta to: |128|64|32|16| |8|4|2|1|
Następnie jak jest liczba 5. Szukasz największego bita, którego wartość liczbowa nie przekracza liczby którą chcesz przekonwertować. Jeżeli to co zaznaczysz w bitach jest mniejsze, sprawdzasz dalej.

Bin>>Dec
U potrzebna jesttablica bitów i trzeba ręcznie zsumować wartości, gdzie są jedynki.


Dodawanie "+"
Proste liczby 5 i 3. Ich suma to 8.
5+3=8
0101+0011=1000
dlaczego? Łatwo sprawdzić w słupku
Kod:
0101+
0011=
1000


Liczy się identycznie jak normalne dziesiątkowe, tyle że jeżeli ma wyjść 2, to tak jakby było 10 i dodajemy 1 do następnego bita (po lewej)

Odejmowanie "-"
na tym samym przykładzie
Kod:
0101-
0011=
0010

Jeżeli ma jest na górze 0, na dole 1, zapożyczamy 1 z następnego po lewej bita.

Mnożenie "*"

Dzielenie "/"

Bit w lewo, prawo "<<", ">>"
Przesuwa bity w lewo, lub prawo. Przesunięcie liczby 5 o 3 bity w lewo:
0000 0101<<3=0001 0100
w prawo:
0000 0101>>3=0000 0000 (bity są pomijane)

OR(lub) "OR", "|"
Tu raczej nie ma zastosowania do liczenia, ale przydatne.
liczby 5 i 3
Kod:
0101 or
0011 =
0111

Dlaczego? porównuje się bity z obu liczb. Jeżyli którykolwiek ma wartość 1, to w wyniku na tym miejscu też będzie 1Razz Jeżeli ORuje się więcej liczb, wystarczy spisać je w kolumnie wszystkie,i jeżeli gdziekolwiek jest 1, to w wyniku tam będzie 1

XOR(to, albo to) "XOR", "^"
j.w
Kod:
0101 xor
0011=
0110

Dlaczego? w wyniku bit przyjmie wartość 1, wtedy i tylko wtedy gdy tamtych liczbach w jednym jest 1.
Jeżeli jest więcej XORowanych liczb, to tak jak XOR, tyle że musi być tylko w jednej liczbie bit o wartości 1, nie więcej, nie mniej, żeby w wyniku było 1.

AND(i) "AND", "&"
5 i 3 =
Kod:
0101 AND
0011=
0001

Aby wartość przyjęła 1, oba bity muszą mieć wartość 1.


Negacja "NOT", "!"
Nieprzydatne do liczenia, ale często pomocne.
Tu potrzebna jest tylko jedna liczba, niech to będzie 5.
Kod:
0000 0101=
1111 1010
A liczba 3=
0000 0011=
1111 1100

Po prostu zamienia 1 na 0 i na odwrót. Warto tu wspomnieć, że w przekształcaliu udział bierą wszystkie bity w zmiennej!! np. dla integer będzie to 16, 24, lub 32 bity, dla bajta to 8 bitów itd.

Negacja, XOR, OR i AND to operatory logiczne są stosowane przy robieniu różnych warunków (IF, WHILE, DO itd....) Warunek jest spełniony, gdy wartość logiczna wynosi 1. Jako liczby, którymi są np. równania(a==2+b). Jeżeli w jednym warunku stosuje się więcej niż jednego rodzaju operatorów, lepiej użyć nawiasów, wtedy najpierw sprawdza nawiasy i wg tych nawiasów sprawdza, a nie wszystkie liczby po kolei.

To co puste, uzupełnię niedługo


Post został pochwalony 0 razy

Ostatnio zmieniony przez Razi dnia Śro 16:59, 27 Lut 2008, w całości zmieniany 1 raz
Powrót do góry
Zobacz profil autora
musialmati
Administrator
Administrator



Dołączył: 04 Lut 2006
Posty: 6753
Przeczytał: 0 tematów

Pomógł: 16 razy
Ostrzeżeń: 0/5
Skąd: Wrocek

PostWysłany: Śro 17:34, 27 Lut 2008    Temat postu:

...i wszystko jasne

Post został pochwalony 0 razy
Powrót do góry
Zobacz profil autora
Razi
Książe postów
Książe postów



Dołączył: 17 Sie 2006
Posty: 936
Przeczytał: 0 tematów

Ostrzeżeń: 0/5

PostWysłany: Śro 18:55, 27 Lut 2008    Temat postu:

Potraktuj to jako dość brutalne wprowadzenie:D Oczywiście nie trzeba tego umieć, ale to jest pomocne. Trzeba to wiedzieć tylko o co chodzi w negacji, or, xor i and, bo na nich opierają się warunki. A bezpośrednio dodawanie i odejmowanie na bitach to taka ciekawostka... Jeszcze napiszą wstęp do C++ jak bede miał czas. Do php już napisałem, ale strasznie to obkroiłem...

Post został pochwalony 0 razy
Powrót do góry
Zobacz profil autora
Wyświetl posty z ostatnich:    Zobacz poprzedni temat : Zobacz następny temat  
Napisz nowy temat   Odpowiedz do tematu    Forum Forum ZKP Strona Główna -> Poradniki Wszystkie czasy w strefie CET (Europa)
Strona 1 z 1

 
Skocz do:  
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach

fora.pl - załóż własne forum dyskusyjne za darmo
Regulamin