Kezdőoldal » Számítástechnika » Programozás » Pythonban mik ezek a bináris...

Pythonban mik ezek a bináris műveletek?

Figyelt kérdés

win7 Python3.7 Idle


x = 60 # 60 = 0011 1100

y = 13 # 13 = 0000 1101


w = x & y; # 12 = 0000 1100

print("Line 1 - Value of w is",w)


w = x | y; # 61 = 0011 1101

print("Line 2 - Value of w is",w)


w = x ^ y; # 49 = 0011 0001

print("Line 3 - Value of w is",w)


w = ~x; # -61 = 1100 0011

print("Line 4 - Value of w is",w)


w = x << 2; # 240 = 1111 0000

print("Line 5 - Value of w is",w)


w = x >> 2; # 15 = 0000 1111

print("Line 6 - Value of w is",w)


Azt látom, hogy az adott szám bináris alakjában változtatott valamit. De pontosan milyen műveletek ezek? Pl 10-es számrendszerben hogyan lehet értelmezni ezeket a műveleteket? Milyen műveletet kell végezni pl. a 60-nal és a 13-mal, hogy 12-t kapjunk? Úgy is mondhatnám, hogy hogyan lehetne decimális műveletté alakítani őket? Illetve ezeket a nem szokványos műveleteket mikor kell használni?


Köszönöm a válaszokat.


2019. ápr. 9. 14:22
 1/8 A kérdező kommentje:

Output:


Line 1 - Value of w is 12

Line 2 - Value of w is 61

Line 3 - Value of w is 49

Line 4 - Value of w is -61

Line 5 - Value of w is 240

Line 6 - Value of w is 15

2019. ápr. 9. 14:24
 2/8 anonim ***** válasza:
50%
Bináris műveleteket nem lehet decimálisként értelmezni.
2019. ápr. 9. 15:45
Hasznos számodra ez a válasz?
 3/8 anonim ***** válasza:

Csak bináris formában értelmezhetők, Boole-algebra a neve.

A hagyományos Boole algebrában az igaz és hamis értékekkel végeznek műveleteket, ami az informatikában a bináris 1-nek és 0-nak felel meg.

[link]

Leginkább hardverközeli vagy azt imitáló műveleteknél lehet használni, ott megvan az egyes műveletek funkciója, hogy milyen bitmanipulációkra melyiket lehet használni. Decimális értékre nincs is értelme átváltani.

2019. ápr. 9. 18:36
Hasznos számodra ez a válasz?
 4/8 anonim ***** válasza:

Ezek azok a bitműveletek:

[link]

2019. ápr. 9. 18:38
Hasznos számodra ez a válasz?
 5/8 tabaki ***** válasza:
Mellesleg függetlenek a Pythontól, a gép működésének bináris alapjai okán a legtöbb nyelvben benne vannak.
2019. ápr. 9. 18:55
Hasznos számodra ez a válasz?
 6/8 anonim ***** válasza:

Azért van itt baj a felpontozott válaszkban! Aki nem ért hozzá, minek szól bele? Ez nem telefon.

A szám tárolása és az ábrázolása két külön dolog.


[link]


0b1101 egy binárisan ábrázolt szám. A decimális jelentése 13

1*8 + 1 * 4 + 0 * 2 + 1 * 1 = 13



& a bináris és. Azaz két szám binárisan ábrázolsz, akkor és össze éseled, akkor azokon a helyeken lesz 1 az értéke, ahol mindkettőnek 1 az értéke, minden más helyen 0 lesz. Ezt minden helyiértéken elvégzed.

Igazságtáblája:

1 & 1 = 1

1 & 0 = 0

0 & 1 = 0

0 & 0 = 0


0b101 & 0b111 = 0b101

0b101 & 0b100 = 0b100


| a bináris vagy. Azaz két szám binárisan ábrázolsz, és össze vagyolod, akkor azokon a helyeken lesz 1 az értéke, ahol valamelyiknek 1 az értéke, ahol mindkettőnek 0 az értéke, ott 0 lesz.

Igazságtáblája: Ezt minden helyiértéken elvégzed.

1 | 1 = 1

1 | 0 = 1

0 | 1 = 1

0 | 0 = 0


0b101 | 0b111 = 0b111

0b101 | 0b100 = 0b101


^ a bináris xor, avagy kizáróvagy. Azaz két szám binárisan ábrázolsz, és össze xorolod, akkor azokon a helyeken lesz 1 az értéke, ahol a két érték különböző. Ahol a két érték azonos, ott 0 lesz. Ezt minden helyiértéken elvégzed.

Igazságtáblája:

1 | 1 = 0

1 | 0 = 1

0 | 1 = 1

0 | 0 = 0


0b101 ^ 0b111 = 0b010

0b101 ^ 0b100 = 0b001


~ bináris negálás. Azaz a bináris negatívját fogja használni. Ezt hívják komplementernek és komplemensnek is. Mivel ezzel végzett műveleteknek van igazán értelme és nem önmagában használjuk, ezért nagyon egyszerűen: Ahol 0 van, ott 1 lesz, ahol 1 van ott 0 lesz.

De ez nem ilyen egyszerű! Mert attól függ, hogy milyen biten ábrázolod a számot

8 biten: ~1 = ~0000 0001 = 1111 1110

Azaz minden biten megfordítja az adott helyéértéken álló bit értékét.

Ez nem azonos a negálással, ez a 2es komplemense a bináris számnak.

Ha érdekel, olvass utána.


a << n balra tolás n bittel

a >> n jobbra tolás n bittel


Ezt úgy képzeld el, hogy ábrázolod a számot és a meglévő bitjeit odébb tolod. C-ben ebből lehet szép bajokat csinálni, ha nincs levédve a változó határa. Python ennél jobban kényesztet és egyszerű változóknál nem fogsz csinálni sem túlcímzést. Sem más bajt, ami a bitműveletekkel elérhető. Mivel python lekezeli ezt neked a tovább csúsztatott bitek nem jelennek meg máshol jobbra tolásnál és nem is keletkezne máshonnan balra tolásnál.


Példa 8 biten:

139 >> 2 = 0x8B >> 2 # csakhogy borzoljam a kedélyeket a hozzá nem értő válaszadók között. Teljesen mindegy, milyen ábrázolást használsz, a tárolása a számnak akkor is binárisban fog történni. Ezért akár decimálisan, akár hexában is ábrázolhatod a számot.

1000 1011 >> 2 = 0010 0010 = 34


139 << 2 = 0213 << 2 # csakhogy borzoljam a kedélyeket a hozzá nem értő válaszadók között. Teljesen mindegy, milyen ábrázolást használsz, a tárolása a számnak akkor is binárisban fog történni. Ezért akár decimálisan, akár oktálisan is ábrázolhatod a számot.

1000 1011 << 2 = 0100 1100 = 76


Ha nem csak 8 biten lenne ábrázolva, akkor az elejéről a bit is tovább vándorolna.


Nagyon jól működik ez bit flag rendszereknél. Gyors és egyszerre több flag ábrázolható egy számon, ami nagyon hasznos adatbázisok esetén.

2019. ápr. 9. 20:24
Hasznos számodra ez a válasz?
 7/8 A kérdező kommentje:
Köszönöm mindeninek. Utolsó hozzászóló, nagyon szépen elmagyaráztad! Duplán köszönet érte!
2019. ápr. 9. 20:31
 8/8 anonim ***** válasza:

A többiek linkjei is pont ezt írták le. Az picit profibb.

Csak lusta voltam kikeresni, ezért kétszer fáradtam.

2019. ápr. 9. 20:37
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, 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!