Kezdőoldal » Számítástechnika » Programozás » Hogy működik a bitenkénti...

Hogy működik a bitenkénti negálás (c-ben)?

Figyelt kérdés
pl a 16ot ha bitenként negálom,miért lesz -17?
2016. dec. 25. 15:41
1 2
 11/16 anonim ***** válasza:
0%

"Hülyeség, hogy az egyesével történő negálással más eredmény jön ki mint az egy lépésben történttel."


Pfff..

Na, ezek vagytok ti..


" Mért lenne más eredmény?"


Majd tanulsz egy kicsit, ha érdekel és akkor talán rájössz.


" Egyébként nem hiszem hogy a kérdező egyesével negálta volna a biteket."


Most már én sem, ezért írtam amit írtam.


És hát, nem, az egyes komplemens az nem egy "számábrázolás".

2016. dec. 26. 14:23
Hasznos számodra ez a válasz?
 12/16 anonim ***** válasza:
93%

Kérdező, nagyon leegyszerűsítve a lényeg:

Az egyes komplemens azt jelenti, hogy a legnagyobb helyiértéken lévő bit az előjel, és a bitek negálásával előjelet tudunk váltani.


+2 - 0000 0010

-2 - 1111 1101


Ez tök jó lenne, csak a nulla így kétféle értéket is felvehet (+0 és -0), és egyesével számolva ott lesz egy hiba:

2 - 0000 0010

1 - 0000 0001

0 - 0000 0000 // ez nulla

0 - 1111 1111 // ez is nulla !!

-1 - 1111 1110


Ezért találták ki a kettes komplemenst, ahol a negatív számokat eltolják eggyel, hogy stimmeljen a sorozat. (Ezért kell kettes komplemens képzésnél egyet hozzáadni.)

Kettes komplemens ábrázolásban így néznek ki a számok a nulla közelében, lefelé számolva:

2 - 0000 0010

1 - 0000 0001

0 - 0000 0000

-1 - 1111 1111 // (itt is ugyanúgy fordulnak a bitek, mintha a kilométerórát forgatnád visszafelé)

-2 - 1111 1110


Emiatt ha a 16 értéket bitenként invertálod, akkor egyes komplemens formájú számokkal kapnál -16 értéket, de a processzor nem így fogja értelmezni, a fenti okok miatt. Ő kettes komplemensként fogja értelmezni, ami abszolút értékben eggyel el van "tolva".

2016. dec. 27. 11:09
Hasznos számodra ez a válasz?
 13/16 anonim ***** válasza:

"nem pedig a teljes változót egy lépésben a "~" (negáció) operátorral. [...] Utóbbi ugyanis az operandus kettes komplemensét adja eredményül."


~

Binary Ones Complement Operator is unary and has the effect of 'flipping' bits.

[link]

2016. dec. 28. 14:12
Hasznos számodra ez a válasz?
 14/16 anonim ***** válasza:
0%

Olvasni még tudsz?


"(~A ) = 61 i.e., 1100 0011 in 2's complement form."


forrás: [link]

2016. dec. 28. 14:28
Hasznos számodra ez a válasz?
 15/16 anonim ***** válasza:
És te érted is, amit olvasol? Olvasgasd még kicsit azt az oldalt, hátha összeáll a kép.
2016. dec. 28. 22:09
Hasznos számodra ez a válasz?
 16/16 Almafazek válasza:

Nos A kérdés a következő. C-ben a bitenkénti negáció miért ad 16-ra -17-et eredményül?

Ha megnegálod a biteket(~) akkor az 1->0, 0->1 lesz.

Példa:

0001 0000 ; 16

1110 1111 ; -17


De akkor mégis miért lesz -17?

Nos a számítógépnek valahogyan tárolnia kell a negatív, pozitív számokat, és közben azt is figyelembe kell venni hogy a processzor csak összeadni, és negálni tud, és erre visszavezettek minden műveletet. A kettes, eggyes komplemens pont erre valóak, ezzekkel a kivonást is összeadásra vezették vissza, és mivel az eggyes komplemens a bitenkénti negálásnak felel meg, igy mikor megnegálod akkor a szám eggyes komplemenset kapod meg.

DEE VISZONT!!

Ha csak eggyes komplemensben dolgozna a számítógép, akkor 2db 0 lenne a számegyenesen,ami nekünk nem éppen jó, igy jön képbe a kettes komplemens amivel eltolják a negativ számokat eggyel. De ez a negálás folyamán nem fog megtörténni, csak akkor mikor értelmezni probálod azt a bit sorozatot számként.

A számitógépen a számegyenes valahogy igy néz ki:

10000000[-128] ... 11111111[-1] 00000000[0] ... 01111111[127]

Szóval a negálás helyesen müködött, de mikor számként értelmezed akkor mindig a kettes komplemenset fogja kiírni. Ezek persze most mind előjeles számok. ( A legnagyobb bit az előjelbit [0:+,1:-]).

2016. dec. 30. 20:42
Hasznos számodra ez a válasz?
1 2

További kérdések:




Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!