if döngüsü ve and operatörünün anlaşılmaz birlikteliği...YARDIM..

Katılım
11 Şubat 2011
Mesajlar
10
Excel Vers. ve Dili
Excel 2007
Merhaba arkadaşlar konu başlığı gerçekten ruh halimi yansıtacak şekilde yazdım..Çıkamadım içinde şu aşağıda vereceğim kod bloğunda yer alan İf ile And operatörünün kullanımının..
Public Function ikili(sayi As Variant) As String
Dim hane As Integer
Do
If (sayi And 2 ^ hane) = 2 ^ hane Then
ikili = "1" + ikili
Else
ikili = "0" + ikili
End If
hane = hane + 1
Loop Until 2 ^ hane > sayi
End Function
Private Sub Command1_Click()
Dim veri As String
veri = InputBox("binary sistemine çevrilecek sayıyı giriniz")
MsgBox (ikili(veri))
End Sub
Yukarıdaki kodlarda decimal bir sayıyı binary sayıya çevirme kodları verilmiş...burada özelliklekalın yazdığım if kontrolündeki (sayi and 2^hane)=2^hane ifadesini çözümleyemedim...yani and operatörü ifade1(sayi) ile ifade2(2^hane) nin her ikisinin de TRUE olması halinde TRUE döndürecektir..FAkat Benim idrak etmekte zorlandığım hususda tam burası; burada sayının nasıl bir TRUE/FALSE sorgulaması yapılıyor ..Aynı şekilde ifade2(2^hane) nin de TRUE/FALSE sorgusu neye göre yapıyor..VE eşitliğin karşısı ile hangi mantıkla TRUE/FALSE sorgusuna gidilmektedir...
Arkadaşlar bu anlaşılmaz kod bloğunun anlaşılır hale getirecek arkadaşalara şimdiden teşekkürlerimi sunuyorum..
 

mancubus

Destek Ekibi
Destek Ekibi
Katılım
6 Ocak 2010
Mesajlar
2,224
Excel Vers. ve Dili
İŞ: 2021 Win Eng
merhaba.

dediğiniz gibi bir ayrı ayrı dönüşüm yok.

(sayi And 2 ^ hane) = 2 ^ hane ise True döndürüyor ve ikilinin başına 1 ekliyor.
(sayi And 2 ^ hane) <> 2 ^ hane ise False döndürüyor ve ikilinin başına 0 ekliyor.

formül sonucu gelen değerin METİN olduğuna dikkat etmek lazım.

(Sayı1 And Sayı2) verildiğinde visual basic programı özelliği olarak her iki sayı ayrı ayrı binary'e dönüştürülüyor ve And operatörüne göre basamak basamak eklenerek yeni binary sayı bulunuyor. 2 sayı basamak olarak farklı ise eksik basamak kadar başa 0 ekleniyor. (0 ve 0 = 0, 1 ve 0 = 0, 0 ve 1 = 0, 1 ve 1 = 1)


________________
araştırma: bendeniz.
 
Katılım
11 Şubat 2011
Mesajlar
10
Excel Vers. ve Dili
Excel 2007
Öncelikle ilgi ve alaknızdan dolayı teşekkürlerimi sunuyorum. Fakat;
If (sayi And 2 ^ hane) = 2 ^ hane kısmından nasıl bir TRUE degeri elde ediliyor ki; fonksiyona "1" değeri gönderilmiş oluyor.
mesela fonksiyona gönderilen sayı 10 olsun; döngüsel işlem esnasında
if(10 and 2^0)=2^0 ----> FALSE dönebiliyorken, fonksiyona gönderilen sayı 17 olsa;
if(17 and 2^0)=2^0 ----> TRUE dönebiliyor..Burada nasıl bir mantık işliyor anlamış değilim..Bİr diğer anlamadığım konu ise; açıklama adına fonksiyona gönderilen sayı 29 olduğunu varsayarak sorunu dile getirmeye çalışayım;
if döngüsü içerisinde true ise "1" ekliyor fonksiyona ELSE ifadesi işliyorsa "0" ekliyor Şu kod bloğu ile;
b]If (sayi And 2 ^ hane) = 2 ^ hane[/b] Then
ikili = "1" + ikili
Else
ikili = "0" + ikili
End If
Evet şimdi 29 verisinden yola devam edelim;
if(29 and 2^0)=2^0 ---> TRUE dönüyor ve "1" değeri ekleniyor.
if(29 and 2^1)=2^1 ---> FALSE dönüyor ve "0" değeri ekleniyor.
if(29 and 2^2)=2^2 ---> TRUE dönüyor ve "1" değeri ekleniyor.
if(29 and 2^3)=2^3 ---> TRUE dönüyor ve "1" değeri ekleniyor.
if(29 and 2^4)=2^4 ---> TRUE dönüyor ve "1" değeri ekleniyor.
bu işleme bakarak msgbox'da vermesi gereken sonuç: 1 0 1 1 1 olması gerekirken, neden sondan ekleme yaparak 1 1 1 0 1 oluyor burasıda bu kod bloğunun anlaşılmayan ikinci kısmı..Hoş birinci kısmını anlayabilsem ikinci kısım bir nebze olsun sineye çekilir diyeceğim ama birinci kısmı anlayamamak temel operatör işlemlerinde dahi eksik olduğum kanısı uyandırarak daha yolun başında özgüven sarsılmasına yol açıyor..
 
Son düzenleme:
Katılım
11 Şubat 2011
Mesajlar
10
Excel Vers. ve Dili
Excel 2007
(Sayı1 And Sayı2) verildiğinde visual basic programı özelliği olarak her iki sayı ayrı ayrı binary'e dönüştürülüyor ve And operatörüne göre basamak basamak eklenerek yeni binary sayı bulunuyor. 2 sayı basamak olarak farklı ise eksik basamak kadar başa 0 ekleniyor. (0 ve 0 = 0, 1 ve 0 = 0, 0 ve 1 = 0, 1 ve 1 = 1)
________________
araştırma: bendeniz.
Buradaki (Sayi1 and Sayi2)'nin visual basic binary çeviriyor demişiniz; benim yukarıdaki verdiğim örnekle nasıl bir mantık yürümekteki ilk döngüye 10 girerse FALSE , 29 girerse TRUE dönmekte..Bİraz daha açıklayıcı olursanız benim gibi işin başında olan biri için büyük iyilik yapmış olursunuz..
 

Necdet

Moderatör
Yönetici
Katılım
4 Haziran 2005
Mesajlar
15,373
Excel Vers. ve Dili
Ofis 365 Türkçe
Merhaba,

Fonksiyon her zaman doğru çalışmıyor. Fonksiyonun nasıl çalıştığını anlamadım ama xl fonksiyonu ile sonucu deneyebilirsiniz.

Sayının A1 de olduğunu varsayarsak B1

Kod:
=DEC2BIN(A1)
Dec2Bin fonksiyonu sınırlı sayıyı çeviriyormuş.


Kod:
Function ikili(Sayı As Long) As String
 
    Dim Sonuc As String
    Dim Kalan As Long
    
    Do
        Kalan = Sayı Mod 2
        Sayı = Int(Sayı / 2)
        Sonuc = Kalan & Sonuc
    Loop Until Sayı = 0
    
    ikili = Sonuc
End Function
 
Katılım
11 Şubat 2011
Mesajlar
10
Excel Vers. ve Dili
Excel 2007
Necdet bey öncelikle ilgi ve alaknızdan dolayı teşekkürlerimi sunuyorum..Kodların her zaman doğru çalışmadığını söylemişiniz..Fakat defaten denenmiş olan bu kodlar her zaman için çalışır sonuç vermiştir..Bende isterdim ki zaman zaman hata versin çalışmasın..Ki bende bu kodlara takılı kalmasaydım böylece...Gerçekten if döngüsünü anlamakta zorluk çekeceğimi sanmıyorum..Sadece yukarıda da belirttiğim gibi and operatörü nasıl bir işlev üstleniyor ki Boolean sorgulama oluşturabiliyor..Ayrıca mancubus' un
merhaba.
formül sonucu gelen değerin METİN olduğuna dikkat etmek lazım.
bu ifadeleri ile neye dikkat çekmeye çalıştığını da idrak edebilmiş değilim..Sonuçta döngüye giren variant (veri adı verilen bir değişken) ile fonksiyonun sonuç olarak string geri döndürmesidir..Bunun anlaşılmayan kısmın anlaşılır hale getirilmesinde nasıl bir argüman olarak kullanılacağı hususunda bir mantık geliştirebilmiş değilim..
 

mancubus

Destek Ekibi
Destek Ekibi
Katılım
6 Ocak 2010
Mesajlar
2,224
Excel Vers. ve Dili
İŞ: 2021 Win Eng
fonksiyonun içeriğine bakmadım sadece And operatörü ile ilgili açıklama bulmaya çalıştım.

sizin 10 ve 17 sayıları ile birlikte 2^0 değerlendirmenizi aşığadaki gibi tablo yaparsam belki anlaşılır.
 

Ekli dosyalar

mancubus

Destek Ekibi
Destek Ekibi
Katılım
6 Ocak 2010
Mesajlar
2,224
Excel Vers. ve Dili
İŞ: 2021 Win Eng
.Ayrıca mancubus' un
bu ifadeleri ile neye dikkat çekmeye çalıştığını da idrak edebilmiş değilim..Sonuçta döngüye giren variant (veri adı verilen bir değişken) ile fonksiyonun sonuç olarak string geri döndürmesidir..Bunun anlaşılmayan kısmın anlaşılır hale getirilmesinde nasıl bir argüman olarak kullanılacağı hususunda bir mantık geliştirebilmiş değilim..
bu üsluptan hiç hoşlanmadım.
 

hımmmmmmmm

Destek Ekibi
Destek Ekibi
Katılım
10 Temmuz 2011
Mesajlar
599
Excel Vers. ve Dili
2000-2007-2010-2016
slm

benim anladığım şu..
and operatörü kullanım biçimi olarak kendi içinde bunu çözüyor..
bu yönlü kullanım ilk defa görüyorum... ve bu kullanım ikili sistemi kendi içinde çözmekte...

nolmal durumda 29 and 2 yi kontrol edin 0 verecektir
yine aynı biçimde 29 and 1-4-8-16 katları kotrol edin 1 verecektir…
hesabıda şöyle sanırım

29 AND 16 Sonucu için 16<29 = 1 bulmakta
29 AND 8 Sonucu için 16+8=24<29 = 1 Bulmakta
29 AND 4 Sonucu için 16+8+4=28<29 = 1 Bulmakta
29 AND 2 Sonucu için 16+8+4+2=30>29 = 0 bulmakta
29 AND 1 Sonucu için 16+8+4+0+1=29=29 = 1 bulmakta (Sıfıra Dikkat)

ıf-and kontrolü bu yönlü kullanımı ile şu anda bu hesabı kendiliğinden yapıp analiz edebilmekte.. vba nın özelliğinde bu mevcut..

ayrıca tebrik edrim... nedeni, anlamaya çalışmak daha anlamlıdır...
 

hımmmmmmmm

Destek Ekibi
Destek Ekibi
Katılım
10 Temmuz 2011
Mesajlar
599
Excel Vers. ve Dili
2000-2007-2010-2016
kotlama hususunda
 
Son düzenleme:

hımmmmmmmm

Destek Ekibi
Destek Ekibi
Katılım
10 Temmuz 2011
Mesajlar
599
Excel Vers. ve Dili
2000-2007-2010-2016
slm

29 sayısının ikili sayı sisteminde karşılığı 11101 dir
AND oprt.; 29 sayısı ile 1-2-4-8-16-32 ... katsayıları analiz ederken döngü küçükden başlamış... dolayısıyla sonuç 10111 olacaktır... doğru sonucu alabilmek için kotlamada ( ikili="1" + ikili) veya ( ikili="0" + ikili ) yazılması gerek görülmüş..

aksi şekilde döngü büyükden küçüğe doğru olsaydı.. ( ikili=ikili+"1" ) veya ( ikili=ikili +"0") yazılmak durumundadır.
 

Necdet

Moderatör
Yönetici
Katılım
4 Haziran 2005
Mesajlar
15,373
Excel Vers. ve Dili
Ofis 365 Türkçe
Necdet bey öncelikle ilgi ve alaknızdan dolayı teşekkürlerimi sunuyorum..Kodların her zaman doğru çalışmadığını söylemişiniz..

Özür dilerim yanlış fonksiyon kullanmışım o yüzden yanlış olduğu kanısına varmıştım.
 
Katılım
11 Şubat 2011
Mesajlar
10
Excel Vers. ve Dili
Excel 2007
bu üsluptan hiç hoşlanmadım.
Herşeyden önce mancubus arkadaşımdan özür diliyorum..İstemeden de olsa kırmışsam eğer..Ki mazur gör ki kardeşim gerçekten gıcık bir yazılım var karşımda ve işin içinden çıkamadıkça geriliyor insan..Zira şahsına yönelik bir yerme veya kırıcı bir tavırdan haya ederim...Sadece anlaşılmayan noktaları dillendirirken, tıpkı kodlar gibi sanırım yanlış anlaşıldım:frown:..Tekar tekrar özür dileyerek..Şunu belirtmek isterim ki; herşeyden önce soruna ilgi gösterilmiş veyardım edilmeye çalışılmış bu bile büyük bir minnet değeridir...
 
Katılım
11 Şubat 2011
Mesajlar
10
Excel Vers. ve Dili
Excel 2007
sayın hımmmmmmm bey ilginiz için teşekkürlerimi sunuyor ve öncelikli olarak da
ayrıca tebrik edrim... nedeni, anlamaya çalışmak daha anlamlıdır...
bu yorumunuzun öğrenme hevesime katalizör etkisi yaptığını da belirtmek istiyorum..VE şimdi sizin açıklamalarınız üzerinden anladığım veya anlamakta zorlandığım yerleri irdeleyerek konunun tam bir şekilde netliğe kavuşması hususunda fikir birliği edelim..Şimdi kurulan DO LOOP UNTİl döngüsü ile sayinin içerisinde 2'nin üslü katları seçilmiş ve sayıdan büyük hale geldiği zaman zaten döngünün sonlandırılması sağlanmış..Böylece bize bir kağır bir kalem ile önümüze soru olarak gelen onluk bir sayıyı 2'lik bir sayıya çevirirken ne kadar bölme işlemi yapacağımızın sayısını veriyor...Burası tamam..Lakin aşağıdaki açıklamanızda;
29 AND 16 Sonucu için 16<29 = 1 bulmakta
29 AND 8 Sonucu için 16+8=24<29 = 1 Bulmakta
29 AND 4 Sonucu için 16+8+4=28<29 = 1 Bulmakta
29 AND 2 Sonucu için 16+8+4+2=30>29 = 0 bulmakta
29 AND 1 Sonucu için 16+8+4+0+1=29=29 = 1 bulmakta (Sıfıra Dikkat)
Neden toplama yaparak ve gene neden büyüklük küçüklük kıstasına göre değerlendirme yapıldığını anlamış değilim..BU sizin kurgulamış olduğunuz bir yaklaşım mı..Yoksa gerçekten bu yazılım bu şekilde mi işlemektedir..İşliyorsa tabi neden bu şekilde bir işleyişe sahip...Tekrardan teşekkürlerimi sunarken..İnşaallah en kısa sürede şu yazılımı açıklığa kavuştururuz el birliği ile...
 

hımmmmmmmm

Destek Ekibi
Destek Ekibi
Katılım
10 Temmuz 2011
Mesajlar
599
Excel Vers. ve Dili
2000-2007-2010-2016
slm

bunu sormanızı bekliyodum...
16 ve 2 katına göre if kontrolünün nasıl işlem gördüğüne bakalım.. diğerleride buna göre hesaplanacaktır...

and opr için 1 ve 1 = 1 diğer karşılaştırmalar sıfırdır.. bu bilgiyi biliyoruz...yani 1 0 ve 0 1 ve 0 0 karşılaştırmaları sıfırdır... 1 1 karşılaştırması 1 dir...
===============================================

ıf kontrolü diyorki:. 29 AND 16=16 ise 1 yaz değilse 0 yaz... and opr hemen şu işlemi yapıyor...
29 karşılığı 11101
16 karşılığı 10000
--------------------- and operatörüne göre aşağı doğru karşılaştırma yapalım
sonuç-----10000
sonuç 10000 bitleri 16 nın karşılığı dolayısıyla if kontrolü eşitliği doğru olmuş oldu...
yani sonuç 16=16 oldu... şart doğruluğu sağlandığından işlem 1 olur....
===============================================

ıf kontrolü diyorki:. 29 AND 2=2 ise 1 yaz değilse 0 yaz... yani 29 la 2 nin bitlerini karşılaştır.. sonuca bak..çıkan bitler 2 nin bitlerimi... and opr hemen şu işlemi yapıyor...
29 karşılığı 11101
2 karşılığı_ 00010
---------------------and operatörüne göre aşağı doğru karşılaştırma yapalım
sonuç-----00000
sonuç 00000 çıktı...bu bitler 2 nin karşılığı değil... sıfırın karşılığı... dolayısıyla if kontrolü eşitliği yanlış olmuş oldu... ve else den sonraki işlem alınıyor...ve sonuç 0 olur...
===============================================

başka bakalım ...
ıf kontrolü diyorki:.29 AND 8=8 ise 1 yaz değilse 0 yaz...and opr hemen şu işlemi yapıyor...
29 karşılığı 11101
8 karşılığı 01000
---------------------and operatörüne göre aşağı doğru karşılaştır
sonuç------01000
sonuca bakalım bitler 8 in bitlerimi... 01000 bitleri 8 karşılığı çıktı... dolayısıyla if kontrolü eşitliği sağlamış olsu... ve sonuç 1 olur...

yani... 29 un bitleri ile 8 in bitleri karşılaştırılıyor.. karşılaştırma eylemi bitler olarak yapılıyor ama işlem sayısal olarak devam ediyor... karşılaştıralım...
sondan başlarsak: 1-0 için 0; 0-0 için 0;1-0 için 0;1-1 için 1 bulunuyor...
dolayısıyla sonuç 8 in bitleri çıkıyor... bitler tekrar sayıya dönüştürülüp 8=8 sağlanmış oluyor...

şimdi if e bakalım
11101 and 01000 =01000 yani 8=8 aranan eşitlik doğru olduğu için elseden önceki işlem yapılıyor ... ikili değeri 1 olmuş oldu...
böylece sırayla her katsayı, bizim veriğimiz sayı ile kıyaslanmış olmakta...

anlaşılmaz ise farklı bir anlatım yapmaya çalışayım...

bir önceki konuda hesaplama biçimi ile ilgili ifadeler sanki and öyle işlem yapıyomuş gibi bir durum oluşturmuş..
 
Son düzenleme:

hımmmmmmmm

Destek Ekibi
Destek Ekibi
Katılım
10 Temmuz 2011
Mesajlar
599
Excel Vers. ve Dili
2000-2007-2010-2016
slm

sadeleştirirsek

AND opr. kullanım biçimi olarak bitleri karşılaştırma işlemi yapabilmektedir...
ifade1 and ifade2 şeklinde kullanılır
ifadeler 29-16 ve 29-2 olsun ...

Kod:
29 and 16  bitleri     
1        1     =  1  
1        0     =  0
1        0     =  0
0        0     =  0
1        0     =  0
karşılaştırma sonucu bitler 16 sayısını verir... eşitlik şartı sağlandı
if işlemi elseden öncelki işlemi yapar... işlem 1 alınır
----------------------------------------------------
Kod:
29 and 2  bitleri 
1        0     =  0  
1        0     =  0
1        0     =  0
0        1     =  0
1        0     =  0
karşılaştırma sonucu bitler 2 sayısını vermez... şart eşitliği sağlanamadı
if işlemi elseden sonraki işlemi yapar... işlem 0 alınır
 
Katılım
11 Şubat 2011
Mesajlar
10
Excel Vers. ve Dili
Excel 2007
anlaşılmaz ise farklı bir anlatım yapmaya çalışayım.....
Anlaşılmaması gibi bir durum söz konusu olabilir mi? Böylesine kapsamlı bir açıklamadan sonra:)..Gerçekten çok teşekkür ederim...En yürekteni de konuya bu denli ilgili yaklaşımınız ve konuyu kavratmadaki azminiz..SAnırım benim kodların arka planına inmedeki azmim; gösterdiki sizinle benzeşir özelliklere sahibiz..Şunu da eklemeden edemeyeceğim..BU kodları aldığım kaynağın yazarı bu kodları öylece yazmış bırakmış ve bir açıklama dahi yok..VE bu kaynak konuyu sıfırdan öğrenmek isteyenler için kaynak niteliği taşıyor..Buradan şu sonuç çıkıyor ki; Öğretmenlik bambaşka bişey..Sizin sabırla, zihindeki bütün karanlık noktaları aydınlatıcı kapsamlı anlatımınızla; kodları yazıp bırakmak aradaki farkı göstermektedir..Formdaki bütün arkadaşlardan Allah Razı olsun..İnternetten faydalanmasını bilirsen..Bence en temel kaynak internettir...Tabi interneti temel kaynak statüsüne taşıyanda böylesi faydalı formları kurarak bilenlerle bilmeyeneleri bir araya getirenler, ve sizin gibi bildiklerini paylaşarak bilginin yayılmasını ve daha da gelişmesine yardımcı olanlardır..Tekrardan teşekkürlerimi sunarken, bir başka takıldığım yerde görüşmek dileği ile:)
 
Katılım
20 Şubat 2013
Mesajlar
1
Excel Vers. ve Dili
ingilizce
selam ,

Çok basit olacak ama D sütununda 80 in altında bir değer varsa kırmızı yap üstünüde mavi yap diyemiyorum.Sütunun tümü seçilecek.
 
Üst