DevProTalk

DevProTalk (http://www.devprotalk.com/index.php)
-   Sva početnička pitanja (http://www.devprotalk.com/forumdisplay.php?f=40)
-   -   C - operacije nad bitovima i maske (http://www.devprotalk.com/showthread.php?t=3891)

degojs 29. 10. 2007. 23:40

Ma.. :) To beše čisto razumevanja radi (pošto je Gruja već dao primer sa pomeranjem), a i moje znanje C je.. sećanje :)

bluesman 30. 10. 2007. 00:31

Citat:

Originalno napisao degojs (Napišite 45851)
.... a i moje znanje C je.. sećanje :)

... od pre jedno 15 godina :)

već sam odavno zaboravio na ove fensi "shift" izraze.

LiquidBrain 30. 10. 2007. 11:46

haha... jbte, i mene ste zbunili...

Da ti ne pishem detaljno, evo link pa pogledaj:
http://www.vipan.com/htdocs/bitwisehelp.html

Tu je sve lepo objasnjeno...

Poenta price je da ti koriscenjem bitwise operatora dobijash neku drugu vrednost u registru...

Dakle treba da znash logicke operacije AND, NOT, OR i XOR.

e sada recimo imash broj 64 to je osam keceva: 11111111
i imash masku koja je 63 to je sedam keceva i nula: 11111110
i ukoliko uradish XOR opet cesh da dobijesh 64 iliti 11111111

e sada ti rece da ti treba komplement... koji potpuni ili nepotpuni?!? nepotpuno komplementiranje je u stvari negacija dakle koristicesh ~ a za potpuni komplement samo cesh na to sve da dodash 1...

jablan 30. 10. 2007. 11:53

Citat:

Originalno napisao LiquidBrain (Napišite 45886)
i ukoliko uradish XOR opet cesh da dobijesh 64 iliti 11111111

Kao prvo, 64 nije 11111111.
Kao drugo, 11111111 XOR 11111110 nije 11111111
Već 1.

:)

LiquidBrain 30. 10. 2007. 12:05

u jbte... da da da... hahaha... kakav sam kreten... sorry osam keceva je 255 haha... 1000000 je 64... zajebo sam se...

Sorry ponovo...

ivanhoe 30. 10. 2007. 12:45

al ste ga iskomplikovali.... :D

sve se svodi na ono sto je gruja vec napisao: ako neku vrednost A XOR-ujes sa nekom maskom (nizom bita), binarno gledano na pozicijama gde je u maski 1, u rezultatu ce ta pozicija da ima invertovanu vrednost iz A, a tamo gde je u maski 0 nista se nece promeniti...

znaci tako mozes da togglujes vrednosti nekih bitova u flagovima, ako su upaljeni ugasis ih i obrnuto (odnosno invertujes im vrednost, matematicki gledano). Znaci XOR je za toggle, ako zelis da upalis neki bit pomocu maske onda koristis OR, ako zelis da ga ugasis onda koristis AND sa invertovanom maskom... i tako ti rade ti racunari, prosto :)

btw, ako ti i dalje nije sasvi leglo kako ovo radi, otvori windows kalkulator, prebaci ga u scientific mod i igraj se malo sa binarnim brojevima... kroz praksu se najbolje kapira..

bNasty 30. 10. 2007. 13:36

Off Topic: Ko nije radio sprajtove na Spekiju ili Atariju ST ne sme da pricha o bit-maskama, od sad pa nadalje ;)

Nemanja Avramović 30. 10. 2007. 18:08

E sad mi je delimično jasno: Ja ne mogu samo nad onim delom maske koji je obeležen jedinicama da vršim operaciju već nad ulaznim podatkom i celom maskom, zato mora ^ a ne ~ ... tako? :)

E sad još pravljenje maski... ja sam razumeo da se uzmu sve nule, pa se doda n broj jedinica pa se sve to pomera za pomeraj p i kako se pomera tako se dodaju nule s desne strane, right? I to radi ovaj kod:
maska = ~(~0 << n) << p;
Šta npr. raditi kad između jedinica treba da imam x nula u maski? :P npr. 000110100
Kako to radi? :D Jel može neko ovu liniju gore (bold) da mi objasni do detalja (mi smo koristili ovaj oblik... tačnije, u jednom zadatku smo koristili y = x >> p-n+1; pa onda maska = ~(~0<<n); za neko poravnjanje s desne strane)?

@LiquidBrain: Sad ću da pogledam taj link

bluesman 30. 10. 2007. 18:28

Prvo sto treba da uradis je da dobro skapiras sta je AND, OR, XOR, NOT...

AND: 1 i 1 = 1, sve ostalo daje 0
OR: 0 i 0 = 0, sve ostalo daje 1
...
Pa onda tako da odlucis koji ces operator da koristis. Pored toga treba da znas precedence, odnosno kojim redom se izvrasavaju operacije

Nemanja Avramović 30. 10. 2007. 19:41

Dakle, ako sam lepo shvatio, da bi dobio recimo masku 000110100 treba da odradim:
~(~(~(~0 << 2) << 1) << 1) << 2)

...znači imali bismo:

000000000000 početna vrednost
111111111111 ~ izvršeno nad prethodnom maskom
111111111100 << 2 izvršeno nad prethodnom maskom
000000000011 ~ izvršeno nad prethodnom maskom
000000000110 << 1 izvršeno nad prethodnom maskom
111111111001 ~ izvršeno nad prethodnom maskom
111111110010 << 1 izvršeno nad prethodnom maskom
000000001101 ~ izvršeno nad prethodnom maskom
000000110100 << 2 izvršeno nad prethodnom maskom

Tako? :D


Vreme je GMT +2. Trenutno vreme je 05:34.

Powered by vBulletin® Verzija 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright © DevProTalk. All Rights Reserved.

Mišljenja, saveti, izjave, ponude ili druge informacije ili sadržaji nastali na Sajtu su vlasništvo onoga ko ih je kreirao, a ne DevProTalk.com, tako da ne morate da se oslanjate na njih.
Autori poruka su jedini odgovorni za ovakve sadržaje. DevProTalk.com ne garantuje tačnost, kompletnost ili upotrebnu vrednost informacija, stavova, saveta ili datih izjava. Ne postoje uslovi pod kojima bi mi bili odgovorni za štetu ili gubitak koji je posledica bilo čijeg oslanjanja na nepouzdane informacije, ili bilo kakve informacije nastale kroz komunikaciju između registrovanih članova.
Web sajt može sadržavati linkove na druge web sajtove na Internetu ili neke druge sadržaje. Ne kontrolišemo niti podržavamo te druge web sajtove, niti smo pregledali bilo kakve sadržaje na takvim sajtovima. Mi nećemo biti odgovorni za legalnost, tačnost ili prikladnost bilo kog sadržaja, oglasa, proizvoda, usluga ili informacije lociranim na ili distribuiranih kroz druge web sajtove, niti za bilo kakvu štetu nastalu kao posledica takvih informacija. DevProTalk.com drži i čuva druga prava vlasništva na web sajtu. Web sajt sadrže materijale zaštićene copyright-om, zaštitne znakove i druge informacije o pravu vlasništva ili softver. Članovi mogu poslatu informacije zaštićene pravima vlasništva njihovih nosilaca i ona ostaju zaštićena bez obzira da li su oni koji prenose te informacije to naveli ili ne. Osim informacija koje su u javnom vlasništvu ili za koje dobijete dozvolu, nemate pravo da kopirate, modifikujete ili na bilo koji način menjate, objavljujete, prenosite, distribuirate, izvršavate, prikazujete ili prodajte bilo koju informaciju zaštićenu pravima vlasništva. Slanjem informacija ili sadržaja na bilo koji deo DevProTalk.com, Vi automatski dozvoljavate i predstavljate garanciju da imate pravo da dozvolite DevProTalk.com ili članovima DevProTalk.com bespovratnu, kontinualnu, neograničenu, globalnu dozvolu da koriste, kopiraju, izvršavaju, prikazuju i distribuiraju takve informacije i sadržaje i da iz takvih sadžaja koriste bilo koji deo u bilo koje svrhe, kao i pravo i dozvolu da koriste gore navedene sadržaje. Svi zaštitni znakovi (trademarks), logotipi, oznake usluga, firme ili imena proizvoda koji se pominju na ovom web sajtu su vlasništvo kojim raspolažu njihovi vlasnici.