Tytu³: Liczby ujemne w zapisie dwójkowym Wiadomo¶æ wys³ana przez: admin Listopad 30, 2011, 12:08:18 Metoda uzupe³nieñ do 1 - kod U1
Zapis w kodzie U1 liczb ujemnych uzyskuje siê neguj±c ka¿dy bit reprezentacji binarnej modu³u liczby zapisanej w kodzie ZM i dodaj±c bit znaku BZ=1 np. -1110=1 10112ZM=1 01002U1 (te¿ problem z wykonywaniem dzia³añ, konieczna korekcja) Metoda uzupe³nieñ do 2 (U2) Bit MSB oznacza znak liczby: 1 - znak ujemny 0 - znak dodatni Liczby nieujemne bit znaku + liczba w kodzie binarnym (NKB) Liczby ujemne wyznacza siê modu³ liczby ujemnej i zapisuje siê go w systemie znak - modu³ np |(-4)|10= (0100)2zm w otrzymanym s³owie zamienia siê 1 na 0, a 0 na 1 1011 do otrzymanego s³owa dodaje siê 1 na najmniej znacz±cej pozycji s³owa. (1100)U2 Przyk³ad 1. Jak przedstawiæ liczbê -4 w zapisie dwójkowym: Je¿eli 4 to 00000100, zamieniamy zera z jedynkami, czyli mamy 11111011 Dodajemy 1, czyli mamy 11111100. I to jest w³a¶nie (-4). Tytu³: Odp: Liczby ujemne w zapisie dwójkowym Wiadomo¶æ wys³ana przez: admin Grudzieñ 07, 2011, 11:14:36 Zadanie 2. Program obliczaj±cy bitow± ró¿nicê, przesuniecie w lewo, przesuniêcie w prawo, negacja, bitowa alternatywa i koniunkcja.
#include <cstdlib> #include <iostream> using namespace std; int main(int argc, char *argv[]) {int a,b; cout << "Podaj liczbe od 0-15 dla a \n"; cin >> a; cout << "wprowadz od 0-15 dla b \n"; cin >> b; cout << "bitowa roznica symetryczna: " << (a^b) << endl; cout << "bitowe przesuniecie w lewo: " << (a<<b)<< endl; cout << "bitowe przesuniecie w prawo: " << (a>>b)<< endl; cout << "negacja bitowa a " << ~(a) << endl; cout << "bitowa alternatywa: " << (a|b) << endl; cout << "bitowa koniunkcja: " << (a&b) << endl; system("PAUSE"); return EXIT_SUCCESS; } Tytu³: Odp: Liczby ujemne w zapisie dwójkowym Wiadomo¶æ wys³ana przez: admin Grudzieñ 07, 2011, 11:14:47 Przesuniêcie w lewo - polega na dopisaniu do prawej strony liczby bitowej zera, po dopisaniu lewy najstarszy bit znika, tak aby zachowaæ sta³± liczbê bitów.
a<<b Przesuniecie w prawo - polega na dopisaniu zera do lewej strony liczby bitowej, po dopisaniu z lewej strony zera znika najm³odszy bit ( skrajny prawy). Lub przesuniecie o okre¶lon± liczbê bitów np. a>>b gdzie a liczba która bêdzie przesuwana, b - o tyle bitów przesuwamy liczbê. np. 1111>>0001 wy¶wietli wynik 0111, Bitowa ró¿nica symetryczna - wykrywa ró¿nicê pomiêdzy bitami dwóch liczb, je¿eli bity umieszczone na tych samych pozycjach ró¿ni± siê to wpisywana jest warto¶æ 1 je¿eli bity nie ró¿ni± siê to wpisywane jest 0. np. 101 ^111 = 010 Negacja - polega na zamianie bitów o warto¶ci 1 na 0 i bitów 0 na 1. Np. ~010 = 101 Wynik dzia³ania jest zaskoczeniem nawet dla Adama, bo wynosi -3, dlaczego tak jest? Jest to spowodowane tym, ¿e aktualnie wiêkszo¶æ komputerów korzysta z systemu reprezentacji liczb ca³kowitych U2. Ka¿da liczba posiada jeden dodatkowy bit znajduj±cy siê na pocz±tku i okre¶laj±cy czy liczba jest dodatnia (0) czy ujemna (1). Tak wiêc w rzeczywisto¶ci dla komputera 101 to nie jest 5, a -3. My¶l±c na skróty, mo¿na napisaæ pewnik pozwalaj±cy na szybkie wyliczenie negacji, czyli ~a == (-a-1). Inaczej mówi±c je¿eli a=2 to ~a=(-2-1)=-3. |