none
Bitsel Operatörler RRS feed

  • Soru

  • Merhaba 

    Byte a=10; 00001010;

    Byte b=(byte)~a; 

    Console.WriteLine(b); //11110101;

    Arkadaşlar bu kodu tane tane(işlem aşaması) açıklarmısınız nasıl 245 yazıyor

    Byte a=32; 

    Byte b=(byte)~a; 

    Console.WriteLine(b); 

    Birde bu soru var yardımcı olursanız sevinirim


    sp

    18 Şubat 2016 Perşembe 11:32

Yanıtlar

  • 10'luk sistemde 10 ikilik sistemde 0000 1010 a karşılık gelir ki zaten yazmışsın. ~ kullandığın zaman ikilik sistemdeki karşılığında 0 olan bitleri 1, 1 olanları da 0 yapılır. Örneğin

    10   = 0000 1010

    ~10 = 1111 0101

    1111 0101 = 245 


    Herkes mevcut projesi bitince daha iyi ve güvenli kod yazmaya başlayacakmış. Hazır olun Türkiye'de yazılım çağ atlamak üzere

    • Yanıt Olarak İşaretleyen tedris 18 Şubat 2016 Perşembe 13:42
    18 Şubat 2016 Perşembe 11:55
  • iyi de 32 nin ikilik sistemde karşılığı 1 değil ki 0010 0000 dır. Bununda tersi 1101 1111 dir yani 223


    Herkes mevcut projesi bitince daha iyi ve güvenli kod yazmaya başlayacakmış. Hazır olun Türkiye'de yazılım çağ atlamak üzere




    • Yanıt Olarak İşaretleyen tedris 18 Şubat 2016 Perşembe 15:00
    • Düzenleyen Olcay GUZEL 19 Şubat 2016 Cuma 14:30
    18 Şubat 2016 Perşembe 14:47

Tüm Yanıtlar

  • bunun işlem aşaması falan yok ki, bitlerin tersini alıyorsun.


    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com

    18 Şubat 2016 Perşembe 11:38
    Moderatör
  • 10'luk sistemde 10 ikilik sistemde 0000 1010 a karşılık gelir ki zaten yazmışsın. ~ kullandığın zaman ikilik sistemdeki karşılığında 0 olan bitleri 1, 1 olanları da 0 yapılır. Örneğin

    10   = 0000 1010

    ~10 = 1111 0101

    1111 0101 = 245 


    Herkes mevcut projesi bitince daha iyi ve güvenli kod yazmaya başlayacakmış. Hazır olun Türkiye'de yazılım çağ atlamak üzere

    • Yanıt Olarak İşaretleyen tedris 18 Şubat 2016 Perşembe 13:42
    18 Şubat 2016 Perşembe 11:55
  • Byte: C#'da işaretsiz 8 bit bir değeri temsil eder. 

    Yani  00000000 - 11111111 arasında değer alabilir. 

    2'li sayı sistemini bildiği varsayıyorum. 

    Örnek olarak; 11111111 = 1*2^7 + 1*2^6 + 1*2^5 + 1*2^4 + 1*2^3 + 1*2^2 + 1*2^1 + 1*2^0 = 255


    Hafızada 8 tane deliğin (delikli kart?) dolu olduğunu düşün. Bunu okuyan uygulamaya bu 8 bitin başlangıç adresini verir ve de bu bir Byte dersen o da alır o 8 tane biti yanyana koyduktan sonra en soldan en önemli olanı (bkz: Most Significant Bit) başlayarak 2'nin katları olarak okur. Atıyorum Int dersen 32 tane okur. Bir de ilk biti işaret biti olarak var sayar eğer dolu ise(yani 1'se) negatif sayı olarak işleme sokar. Ters çevirip bir de toplamı 1 arttırarak negatif değere ulaşır. 

    ~(tilde) operatörü: C#'da NOT işlemi görür. Bitin değerini tersine çevirir. 2lik sayı sisteminde sadece 0 ve 1 olduğu için de bu tersine çevirmeye diğerine dönüştürme olarak bakabilirsin. 

    Şimdi örneğe gelirsek; 

    00001010 = 10 olduğunu biliyorsun sanıyorum. Çünkü; 

    0*2^7 + 0*2^6 + 0*2^5 + 0*2^4 + 1*2^3 + 0*2^2 + 1*2^1 + 0*2^0 = 1*2^3 + 1*2^1 = 8 + 2 = 10

    00001010 değerinin her bitini NOT operatörü ile işleme sokarsak, yani tersine çevirirsek, yani 0 yazan yerlere 1, 1 yazan yerlere de 0 yazarsak elimizde; 

    11110101 bitleri olur. 2'li sayı sisteminden 10'lu sayı sistemine çevrim işlemini de buna yaparsak; 

    1*2^7 + 1*2^6 + 1*2^5 + 1*2^4 + 0*2^3 + 1*2^2 + 0*2^1 + 1*2^0 = 1*2^7 + 1*2^6 + 1*2^5 + 1*2^4 + 1*2^2 + 1*2^2

    = 128 + 64 + 32 + 16 + 4 +1

    = 245





    18 Şubat 2016 Perşembe 12:11
  • Cevaplar için teşekkür ederim

    Byte a=32;  

    Byte b=(byte)~a; 

    Console.WriteLine(b); 

    bunu yaparken yine bir yerde kaldım

    Byte a=32;  ---------Bunu 2 lik sisteme çevirdim kalan 1 yani 000 001 buluyorum bunu 8 basamakmı yapacağım ?

    00 000 001 şeklinde yoksa 000 001 hali ile mi kullanacağım. ?

    Byte b=(byte)~a;  tersine çevirmeyi anladım  111 110 yada 11 111 110 şekline dönüşecek sonra

    bunu 2 lik sisteme çevireceğim  sonucu bulacağım 

    Console.WriteLine(b); 


    sp


    • Düzenleyen tedris 18 Şubat 2016 Perşembe 14:37
    18 Şubat 2016 Perşembe 14:37
  • iyi de 32 nin ikilik sistemde karşılığı 1 değil ki 0010 0000 dır. Bununda tersi 1101 1111 dir yani 223


    Herkes mevcut projesi bitince daha iyi ve güvenli kod yazmaya başlayacakmış. Hazır olun Türkiye'de yazılım çağ atlamak üzere




    • Yanıt Olarak İşaretleyen tedris 18 Şubat 2016 Perşembe 15:00
    • Düzenleyen Olcay GUZEL 19 Şubat 2016 Cuma 14:30
    18 Şubat 2016 Perşembe 14:47
  • 32 yi sürekli 2 ye bölüp kalanları sondan başlayıp yazmıyor muyuz  kusura bakmayın matematik dersini göreli baya oldu hatırladığım kadarı ile çözmeye çalıştım anlamayınca buraya yazdım.

    sp

    18 Şubat 2016 Perşembe 14:52
  • Hesaplama yöntemi doğru. Bazı şeyleri ezbere yapmamak gerekir. Mesela hiç ikilik sistemi karıştırmasan onluk sistem olarak düşün. 

    a = 100

    b = 000000100

    hangisi daha büyük? Sorduğun soru da buna benzer. 32 yi ikilik sistemde 10 0000 şeklinde yazmanla 0010 0000 şeklinde yazman arasında fark yok. İstersen 0000 0000 0010 0000 şeklinde yaz. Hiç bir şey farketmeyecek


    Herkes mevcut projesi bitince daha iyi ve güvenli kod yazmaya başlayacakmış. Hazır olun Türkiye'de yazılım çağ atlamak üzere

    18 Şubat 2016 Perşembe 15:00
  • Ikilik sisteme cevirdim ne demek? 2lik sistemdeki halini string olarak yazdim demek istedin herhalde. Yanlis yapmissin, nasil 1 cikti ki?

    byte a = 32;
    Console.WriteLine(Convert.ToString(a,2).PadLeft(8,'0'));
    
    // ya da
    for (int i = 7; i >= 0; i--)
    {
     Console.Write("{0}", ((1 << i) & a) != 0 ? 1 : 0); 
    }

    18 Şubat 2016 Perşembe 15:05
    Yanıtlayıcı
  • Arkadaşlar sıkıntı basamak sayısını 8 e tamamlamadan hesaplama yapmamdan kaynaklıymış 
    tamam artık mantığını anladım.
    birde Bitsel işlemlerde (a&b) ifadesi oluyor bu ortadaki  işaretin anlamı ve (a ve b) demek ama 
    istenen işlem ne anlamadım
    byte a=32;
    byte b=240;
    byte c=(byte)(a&b);
    cnin değeri 32 oluyormuş neye göre açıklarmısınız?  
    Bu benim çözdüğüm
    1*2^0=1
    1*2^1=2
    1*2^2=4
    1*2^3=8
    1*2^4=16
    0*2^5=0
    TOPLAMI=31 Yanlış
    Bu da doğru olan çözüm.
    1*2^0=1
    1*2^1=2
    1*2^2=4
    1*2^3=8
    1*2^4=16
    0*2^5=0
    0*2^6=64
    0*2^7=128
    TOPLAMI=31+64+128=223 Doğru

    sp



    • Düzenleyen tedris 19 Şubat 2016 Cuma 12:26
    19 Şubat 2016 Cuma 11:50
  • Iyi de sen 00011 111 i nereden buldun?

    byte a = 32;
    byte b = (byte)~a;
    Console.WriteLine("10 luk sistemde: {0}, Ikilik sistemde: {1}", b, Convert.ToString(b,2));


    Bunun icin ilkokul seviyesinden oteye matematik bilmeye bile gerek yok ki. Madem a'nin degerini buldun en azindan, 0'lari 1, 1 leri sifir yap yeter. Sen bastaki 0'lari neden 0 olarak birakiyorsun ki? 

    a = 0010 0000

    b = 1101 1111

    Bak boyle 4'lu gruplar isini daha kolaylastirabilir (nibble deniyor). Bir dortlu grubun degeri 0...15 arasindadir. En sagdaki bit pozisyonu 0. Sola dogru artiyor. Bit degeri * 2^pozisyon alip topla. Ornegin:

    0010 = 0*2^3 + 0*2^2 + 1*2^1 + 0*2^0 = 0*8 + 0*4 + 1*2 + 0*1 = 2

    Yani 2'nin kupune kadar bilmek yetiyor. 

    Dortlu gruplari boyle kendi icinde hesapladiktan sonra, her bir dortlu grubun sonucunu bu sefer 16'nin katlariyla hesapla:

    1101 1111 icin elinde 13 (1101) ve 15 (1111) var.

    13 * 16^1 + 15 * 16^0 = (13 * 16) + (15 * 1)  = 208 + 15 = 223

    Not: Dortlu grup icinde soyle dusun, ilk siraya 2nin katlarini yaz 8, 4, 2,1. Altina ikilik degeri:

    8 4 2 1
    0 0 1 0

    Sonrada sadece 1 olanlari alip topla:

    2

    Baska ornek:

    8 4 2 1
    1 1 0 1

    8+4+1 = 13

    19 Şubat 2016 Cuma 12:35
    Yanıtlayıcı
  • 32 =>   0010 0000

    240 => 1111 0000

    ikisini & işlemine aldığın zaman. Teker teker aynı sıradaki bitleri karşılaştırırsın. Aynı olanlara 1 farklı olanlara 0 yazarsın. Tek aynı olan 1 sağdan 5. olduğuna göre sonuc 

    0010 0000 

    olur. 0010 0000 da 32'ye eşittir


    Herkes mevcut projesi bitince daha iyi ve güvenli kod yazmaya başlayacakmış. Hazır olun Türkiye'de yazılım çağ atlamak üzere



    19 Şubat 2016 Cuma 12:38
  • a & b islemi ayni siradaki bitleri AND ile kontrol ediyor. 1 leri DOGRU, 0 lari YANLIS gibi de dusunebilirsin:

    0 ve 0 = 0
    0 ve 1 = 0
    1 ve 0 = 0
    1 ve 1 = 1

    Yani sadece ayni pozisyonda her ikisi de 1 ise sonuc 1.

    032 = 0010 0000
    240 = 1111 0000
    ---------------
    sonuc 0010 0000 = 32


     
    19 Şubat 2016 Cuma 12:50
    Yanıtlayıcı
  • Yazim hatasini duzelt istersen Olcay, yoksa kafa karistirabilir :)
    19 Şubat 2016 Cuma 12:51
    Yanıtlayıcı
  • Çok yararlı oldu sağolun ben bilmediğim için sordum zaten ilk okul ile alakası yok bilmeyince bilmiyorsun öğrenene kadar.

    Şimdi özetle 

    &  ile aynı değerler için 1

    ~ verilen değerin 2 lik sistemde tersi

    |   ile ne kasdediliyor ? Diyecektim mantık true false olayı biri 1 ise sonuç 1 dönecek karşılaştırınca değilmi ?

    Bu arada hiç bilmeyenler için güzel bir başlık oldu 


    sp



    • Düzenleyen tedris 19 Şubat 2016 Cuma 13:53
    19 Şubat 2016 Cuma 13:50
  • Yazim hatasini duzelt istersen Olcay, yoksa kafa karistirabilir :)
    Abi, rakamla 1 yerine yazıyla "bir" şeklinde yazmışım onu düzelttim. Bir de "O da 32'ye eşittir" cümlesinde "O" yu sıfırla karışabilir diye cümleyi düzelttim. Başka göremedim. Senin kastettiğin bunlardan biri miydi?

    Herkes mevcut projesi bitince daha iyi ve güvenli kod yazmaya başlayacakmış. Hazır olun Türkiye'de yazılım çağ atlamak üzere

    19 Şubat 2016 Cuma 14:10
  • Hayir Olcay :) 

    32 - 0010 0000

    19 Şubat 2016 Cuma 14:21
    Yanıtlayıcı
  • Abi ben de son cevapta arıyorum yazım yanlışını meğer daha öncekilerdeymiş :) Düzeltim abi çok sağol

    Herkes mevcut projesi bitince daha iyi ve güvenli kod yazmaya başlayacakmış. Hazır olun Türkiye'de yazılım çağ atlamak üzere

    19 Şubat 2016 Cuma 14:28
  • Evet | olunca da OR/Veya, ayni mantik tablosundaki true/false. Birisi 1 ise sonuc 1.

    Bir de XOR var ^ ile gosterilen. Onuda "ozel OR durumu" diye dusun. Sadece degerler farkli ise sonuc 1.

    0 ^ 1 => 1
    1 ^ 0 => 1

    0 ^ 0 => 0
    1 ^ 1 => 0 (OR ile bu da 1. O nedenle adi XOR. Yani OR'un bu hali haric OR:)


    19 Şubat 2016 Cuma 14:29
    Yanıtlayıcı
  • Abi benim kafa iyice gitmiş anlaşılan :=) Söylediğin şeyi çok yanlış anlamışım. 

    32 => 0010 0000

    yazmışsın ya. Bu benim yazdığım bir şey zannettim cevaplarıma bakıyorum 32 - 0010 0000 nerde yazmışım diye. Onu düzeltmeye çalışıyorum. Önce gittim doğruyu yanlış hale getirdim. Sonra düşününce farkettim farklı bir şeyden bahsettiğini tekrar düzelttim. Şimdi toparladım sanırım :=)


    Herkes mevcut projesi bitince daha iyi ve güvenli kod yazmaya başlayacakmış. Hazır olun Türkiye'de yazılım çağ atlamak üzere

    19 Şubat 2016 Cuma 14:35