Darmowe Forum
Kwiecień 11, 2025, 06:13:35 *
Witamy, Gość. Zaloguj się lub zarejestruj.
Czy dotarł do Ciebie email aktywacyjny?

Zaloguj się podając nazwę użytkownika, hasło i długość sesji
Aktualności: Forum zostaÂło uruchomione!
 
   Strona główna   Pomoc Zaloguj się Rejestracja  
Strony: [1]
  Drukuj  
Autor Wątek: Liczby ujemne w zapisie dwĂłjkowym  (Przeczytany 9971 razy)
admin
Administrator
Ekspert
*****
Wiadomości: 821


Email
« : 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).
Zapisane
admin
Administrator
Ekspert
*****
Wiadomości: 821


Email
« Odpowiedz #1 : 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;
}
« Ostatnia zmiana: Grudzień 07, 2011, 11:24:14 wysłane przez admin » Zapisane
admin
Administrator
Ekspert
*****
Wiadomości: 821


Email
« Odpowiedz #2 : 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.
« Ostatnia zmiana: Grudzień 07, 2011, 11:23:58 wysłane przez admin » Zapisane
Strony: [1]
  Drukuj  
 
Skocz do:  

Powered by SMF 1.1.11 | SMF © 2006-2008, Simple Machines LLC | Sitemap

Polityka cookies
Darmowe Fora | Darmowe Forum

spw blackmoon proskills zlotasiodemka moikrewni