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?
Enum/Sabitler hakkında sorum var
3
●313
- 07-11-2015, 13:10:10
- 07-11-2015, 15:13:25selam,
ş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Ç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?