Jump to content
Forumu Destekleyenlere Katılın ×
Paticik Forumları
2000 lerden beri faal olan, çok şukela bir paylaşım platformuyuz. Hoşgeldiniz.

Bitwise Operator matematiksel açıklamaları


Artariel

Öne çıkan mesajlar

~: not operatörü bu. bitwise olduğunu unutma ama. mesela int bir x değişkeni 0 olsun, !x sana 1 döndürür ama ~x sana bir integerın o derleyicideki max değerini döndürür(bit olarak düşün, sıfırların tamamı 1 oluyor).

^: xor operatörü bu da.

|: or operatörü.

&: and operatörü.

<<: left shifting yani sola kaydırma. elinde bir int olsun, adı x olsun değeri 1 olsun. derleyicimizde de bir int 8 bit olsun diyelim. sayımız memoryde 00000001 olarak saklanıcaktır. sen bunu x = x << 2 şeklinde kaydırırsan, sayımız 00000100'e dönüşecektir. yani sola n kadar kaydırırsan, sayıyı 2^n ile çarpmış oluyorsun.

>>: bu da sağa kaydırma. bunda da n kadar kaydırınca 2^n ile bölmüş oluyorsun.


matematiksel açıklama ile tam olarak ne kastettin bilemedim ama kendim tekrar etmek adına şöyle bir açıkladım. başka bir şey sorduysan biraz daha açık söylersin anlatırız :d
Link to comment
Sosyal ağlarda paylaş

Hmmm... matematiksel aciklama biraz zor olur.
Ancak 0lar ve 1lerle daha guzel. Ustteki mesaj gibi.

And operasyonu 1. bit, 2. bit, 3. bit...lere bakarak ikisinin de 1 olup olmadigina bakar.

Mesela:

3&5=1
0011 &
0101 in sonucu

0001 cunku hem 0011de hem de 0101de 1. bit 1.

| or. &'a benzer, ama "ya 1. kaynaktan ya da 2. kaynaktan 1 olmasi lazim" kurali var.

3|5=7

0011 |
0101 in sonucu
0111.

^ xor, "ya o, ya bu" tarzinda calisiyor. Yani, bitler birbirinden farkli olacak.

3^5=6

0011 ^
0101 in sonucu
0110 .
Link to comment
Sosyal ağlarda paylaş

Bir kısmını iki tabanında matematiksel olarak açıklayabilirsin, shift 2^n'e bölme ya da çarpma olur. Ama and,or gibi operatörler zaten lojik operatörleridir toplama çıkarma çarpma gibi operatörlerle açıklayamazsın. Matematik altında ayrı bir dal olması lazım zaten lojik'in de o yüzden.
Link to comment
Sosyal ağlarda paylaş

matematiğin altında lojik diye bi dal var evet de, bu operatörleri tanımlayabilirsin basit matematiksel işlemler olan bi dille.

sağa kaydırmak bir kere 2'yle öklid bölmesi yapmak demek
yani böleceksin, kalanı atıcaksın. integer variablelarda bölünce genelde öklid bölmesi yapıyo diller, hata vermiyosa :)
sola kaydırmak 2'yle çarpmak demek

aslında göstermesi de basit bunu

x= sum(i=0,N)[a[i] 2^i] ise,
>>x= sum(i=0,N)[a[i] 2^(i-1)]
diğer yandan
x/2= sum(i=0,N)[a[i] 2^(i-1)]
tamamen aynı şeyler yani :)
asıl zor olan bit to bit and falan onu da nasıl yapıcan söliim:
fonksiyon yazıcan and diye mesela:
ya anlatması zor olur direk yaziim ben :p


int andBitToBit(int x,int y){
int antiResult=0,result=0;
int tempX,tempY,tempResult;
//sonucu tersten buluyoruz
while(x!=0 || y!=0)
{
tempX=x/2;
tempY=y/2;
if(x==1 && y==1)
{
tempResult=1;
}
else
{
tempResult=0;
}
antiResult=antiResult*2+tempResult;
x=x/2;
y=y/2;
}
//bulduğumuz sonucu ters çeviriyoruz
while(antiResult!=0)
{
result=result*2+antiresult/2;
antiresult=antiresult/2;
}
return result;
}


olması lazım işte, diğerleri de aynı şekilde yapılır :P

c yazdım ben sorun olmaz işalla
Link to comment
Sosyal ağlarda paylaş

×
×
  • Yeni Oluştur...