• 07-11-2015, 13:10:10
    #1
    Merhaba arkadaşlar,

    Yazılımda bazı anlamadığım şeyler var.

    Mesela | ve & operatörleri mantıksal sınamalarda JavaScript, C#, Java ve PHP'de || veya, && ise and anlamında kullanılıyor.

    Buraya kadar tamam, burada bir sıkıntı yok. Ama JS ile şu şekilde bir ifade gördüm:

    var a = b | c; //b null, false veya set edilmemişse. c'yi ata anlamına geliyor sanırım (doğru mu emin değilim)

    var a = b & c; //galiba yukarıda olanın tam tersi

    yukarıda ne gibi anlamları olabiliyor?

    Birde Android ile geliştirme yaparken Java kodlarında şöyle bir ifade gördüm:

    editText.InputType(inputType.TYPE_CLASS_TEXT | inputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);

    bu editText'i şifreli gösteriyor.
    Anlamadığım şu ki, TYPE_TEXT_VARIATION_VISIBLE_PASSWORD şifreli göstermek için bir sabit (Enum sanırım). Tamam bunu anladım ama neden bir de TYPE_CLASS_TEXT kullanıyorum neden ikisini | operatörü ile kullanıyoruz?

    Bana bunların mantığını anlatabilir misiniz?
  • 07-11-2015, 15:13:25
    #2
    selam,

    şimdi hocam | işareti bir or (veya) operatörü, & ise and (ve) operatörü. Bunlara bitsel operatörler denir yani işlemler bitlere çevrilerek yapılır. Hemen örnek vereyim

    3 | 5 = ?

    bunu şöyle yapıyorsun
    3 = 011
    5 = 101

    şimdi or operatörü sırasıyla bitleri karşılaştırıyor. en sondan başlayarak yazalım..

    en son bit ikisinin de 1(3 ten gelen) ve 1 (5 ten gelen), bunun sonucu ne olur? 1 olur değil mi? o halde yeni sayımızın en son biti 1,
    şimdi ortaki bitleri karşılaştıralım 1(3 ten gelen) ve 0 (5 ten gelen) , bu ikisi de or ile işleme girerse yine sonuç 1 olur, o halde yeni sayımızın sondan bi önceki biti de 1 yani sayımız şimdilik ..11 oldu..
    ve en baştaki bitleri karşlaştırıyoruz 1 (3 ten gelen), 1 (5 ten gelen), bunların or işlemi de 1 olur o halde çıkan sayımı 111 oluyor, bu da 10 luk tabanda 7 dir..

    aynı sayıları and ile işleme sokalım.

    3 & 5 = ?

    3= 011
    5= 101

    en son bitler 1 ve 1, bunun sonucu 1
    ortadaki bitler 1 ve 0, bunun sonucu 0
    en baştaki bitler 0 ve 1, bunun sonucu da 0

    o halde sayımız 001 dir onun da karşılığı ondalık sayı sisteminde 1 dir.

    Not: or yaparken iki biti topluyorsun eğer ikisi de bir ya da teki 1 ise sonuç 1, ikisi de 0 ise sonuç 0 dır.
    and yaparken çarpım yapıyorsun bitlerden birinin 0 olması sonucu sıfır yapar, ikisi de 1 ise 1 olur.


    senin soruna bakalım şimdi

    var a = b | c;
    şimdi burdaki b = true ve c=false ise a = true dur, eğer b ve c de false ise o zaman sonuç false dur.. üstteki mantıkla aynı

    burda ise
    var a = b & c;

    çarpma uyguluyorsun.. eğer birisi false ise a false, ikisi de true ise a true oluyor. null için de düşünebilirsin.. biri null ise burada a da null olur.


    diğer sorunda ise

    editText.InputType(inputType.TYPE_CLASS_TEXT | inputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);


    burada toplama var.. yine aynı mantık

    enumların arkaplanlarında sayılar vardır hocam, kullanıcı atamasa bile sistem atıyor..
    farzedelim ki inputType.TYPE_CLASS_TEXT = 5
    inputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD = 9 olsun

    o halde inputType.TYPE_CLASS_TEXT | inputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD
    işlemi bize toplamayı söylüyor..

    5 +9 = ?
    5 = 0101
    9 = 1001

    şimdi bunları toplarsak, 1101 gibi bir sonuç elde ederiz, bunun cevabı da 13 dür yani
    5+9 = 13

    peki 13 nedir? atıyorum o da şuna tekabül ediyor

    inputType.TYPE_CLASS_Hidden
    o halde editText.InputType(13) yani editText.InputType(inputType.TYPE_CLASS_Hidden)
    demek oluyor o işlemin sonucu.

    umarım yeterli olmuştur açıklama..

    kolay gelsin
  • 07-11-2015, 15:56:47
    #3
    Çok teşekkürler hocam.
    Bit çeviriyor dediğiniz zaman yeni bir bakış açısı kazandım.

    Yanlış mı doğru mu anladığımı anlamak açısından aşağıdaki kodlara ve benim ne anladığım:
    C#:

    File.SetAttributes(filePath, File.GetAttributes(filePath) | FileAttributes.Hidden);
    //dosyanın eski özelliklerini bozmadan hidden özelliği ekliyor.

    File.SetAttributes(filePath, File.GetAttributes(filePath) & ~FileAttributes.Hidden);
    //burada da sadece hidden özelliğini kaldırıyor?

    File.SetAttributes(filePath, File.GetAttributes(filePath) & ~(FileAttributes.Archive | FileAttributes.ReadOnly));
    //burada Arşiv ve SaltOkunur özelliklerini beraber mi kaldırıyor?
  • 07-11-2015, 16:23:44
    #4
    aynen hocam bu şekilde.. bunları ezberlemene gerek yok, kullanım örnekleri v.s. vardır onlardan faydalanabilirsin.