Hogy működik a bitenkénti negálás (c-ben)?
Kettes komplemens.
pen-dragon: egyes komplemens esetén 16-ból -16 lenne bitenkénti negálás után. De a kettő valóban nagyon hasonló.
Nem hasonló.
A kettes komplemens képzés úgy történik, hogy bitenként negálsz, majd az eredményhez hozzáadsz egyet.
A kérdező, állítása szerint CSAK negált.
A kérdező bitenként negált, mégis mást kapott, mint amit várt.
Erre írtam az egyes komplemenst, hogy hátha segít neki, mivel ő tudja, hogy egyes komplemenst akart képezni, vagy csak negálni a biteket.
Az mindenesetre érthető, legalábbis annak kéne lennie, hogy ha csak egyes komplemenst képez valaki, akkor abból nem lesz automatikusan kettes, tehát meg kéne vizsgálni a történéseket.
A kérdezőnek:
A helyzet az, hogy a negálás, a bitek invertálása alapvetően azt jelenti, hogy egy bináris szám bitjei ha azok nullák, akkor egyre, ha egyesek akkor nullára változnak.
Tehát, például a
00011110 invertálás után
11100001 lesz. Ez pontosan megegyezik a kiinduló szám egyes komplemensével.
Kettes komplemensről szó nincs!
A gondot az okozta (legalábbis nekem), hogy te szó szerint bitenkénti negálást írtál. Én ezt úgy értelmeztem, hogy patternnel negáltad a biteket - akár egyesével - nem pedig a teljes változót egy lépésben a "~" (negáció) operátorral. Már pedig te vélhetőleg így tettél. Nos, ez hiba volt.
Utóbbi ugyanis az operandus kettes komplemensét adja eredményül.
Ha a jövőben, C-ben egyes komplemens képzésre (vagy n-edik bit negálására) volna szükséged, akkor azt NE a "~" operátorral végezd.
Többiek:
pen-dragon tuti arra hajt, hogy neki legyen a legkisebb a hasznos válaszainak az aránya.
Kérdező:
pen-dragon válaszait vedd figyelmen kívül
pen-dragon:
Tudom, hogy troll vagy, de azért leírom mi a gond a válaszoddal:
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. Mért lenne más eredmény? Egyébként nem hiszem hogy a kérdező egyesével negálta volna a biteket.
Egyes komplemensől sehol nincs szó. Az egy számábráolás. A Kérdező csak negálta a biteket, majd azt kiíratta 10-es számrendszerben. Ennél a kiírásnál kettes komplemens kódként lett értelmezve a bitsorozat.
Ha egyes komplemens lenne, akkor azt írta volna neki ki a program, hogy -16.
Részemről én itt befejeztem a vitát, ha válaszolsz, én már nem fogok rá reagálni.
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!