PİC C de 'VE' koşulu nasıl sağlanır?

Arkadaslar kusura bakmayın konuyla alakalı degıl ama paketleme makınasında bulunan basınc transmıtterının olcdugu 4-20mA kucuk plc nın anolog ınputuna gırıyor ve sıstemdekı basıncı olcuyor.ben nasıl bır baglantı elemanı kullanmalıyım nasıl bır baglantı yapmalıyım kı aynı basıncı farklı bır plc den okuyabıleyım yardımlarınız ıcın sımdıden tesekkur ederım ...
 
if (A && B):
A ve B, 0 dan farklı ve birbirine denk olduğu sürece fonksiyon işler.

if (A==1 && B==1):
A 1 ve B 1 olduğunda fonksiyon işler ve birbirlerinin yerine kullanılamazlar.
Sadece bit bazlı değil, lojik kontrol olarak ta farklı sonuçlar doğururlar.



tyildizak hocama cevaben yazdığım mesaj, size de vereceğim cevaptır. Sizin aksinize, bu örnek için dahi aynı olmadığını düşünüyorum.

Karışıklığa sebep oldum, üzgünüm :)

Şöyle özetlemeye çalışayım

if (A && B) ve if (A==1 && B==1) ifadeleri

A ve B, 1 bit'lik değişkenler ise, kullanımda aynı sonucu verir.(örn. port bitleri gibi)

A ve B, 2 ve üzeri bit'lik değişkenler ise, söylediğiniz gibi, farklı şeylerdir.


Yukarıda önermek istediğim aslında şuydu:

if((input(pin_a0)==1)&&(input(pin_b0)==1))

yerine

if(input(pin_a1)&&input(pin_a2))
 
Hocam, kast ettiğinizi ilk başta anladım fakat C ye hakim olmayan bir arkadaş bu örneğe bakarak çözüm üretmek ister ise, argüman içerikleri değiştiğinde hatalı sonuçlar alacaktır.
Detaylı konuşabilelim ve olay netleşsin diye bu uslup ile yazdım.
Siz de takdir edersiniz ki C de operatörler kadar imleçlerin de kulanımı hayati öneme sahiptir.
 
if (A && B):
A ve B, 0 dan farklı ve birbirine denk olduğu sürece fonksiyon işler.

if (A==1 && B==1):
A 1 ve B 1 olduğunda fonksiyon işler ve birbirlerinin yerine kullanılamazlar.
Sadece bit bazlı değil, lojik kontrol olarak ta farklı sonuçlar doğururlar.



tyildizak hocama cevaben yazdığım mesaj, size de vereceğim cevaptır. Sizin aksinize, bu örnek için dahi aynı olmadığını düşünüyorum.

Hatamda ısrarcıyım.. :) && işlemi ile || işlemini karıştırıyorsunuz sanırım..

if (A && B) dendiğinde boolean değişkenlerde;
A ve B nin ikiside 1 ise, komutlar işlenir.. Bildiğiniz lojik "ve" kapısı kurulur yani..

if ((A == 1) && (B == 1)) dendiğinde boolean değişkenlerde;
A = 1 ve B = 1 ise; yani sonuç olarak ikisi de 1 ise komutlar işlenir.. Birinin 1 olmadığını düşünürsek bu durumda ve kapısı gereği sonucu 0 yapacak ve komutları işlemeyecektir..

Tek bitlik karşılaştırmalar düşünüldüğünde ikisi de birbirinin yerine kullanılabilir sanırım..

C dilinde çok iyi değilim, uzun zamandır da prog yazmadım C de, ama bir püf noktası yoksa true=1, false=0 olduğunu varsayarsak bit bazında doğru düşündüğümü sanıyorum.. Hatam nerde acaba ?
 
Hatanız burada!
if (A && B) dendiğinde boolean değişkenlerde;
A ve B nin ikiside 1 ise, komutlar işlenir.. Bildiğiniz lojik "ve" kapısı kurulur yani..

Burada A ve B 1 ise anlamı oluşmaz. A ve B 0 dan farklı ise anlamı da oluşmaz.
A ve B birbirine eşit olan her hangi bir değer olabilir ve sonuç bu durumda 1 döner.
 
Hatamda ısrarcıyım.. :) && işlemi ile || işlemini karıştırıyorsunuz sanırım..

if (A && B) dendiğinde boolean değişkenlerde;
A ve B nin ikiside 1 ise, komutlar işlenir.. Bildiğiniz lojik "ve" kapısı kurulur yani..

if ((A == 1) && (B == 1)) dendiğinde boolean değişkenlerde;
A = 1 ve B = 1 ise; yani sonuç olarak ikisi de 1 ise komutlar işlenir.. Birinin 1 olmadığını düşünürsek bu durumda ve kapısı gereği sonucu 0 yapacak ve komutları işlemeyecektir..

Tek bitlik karşılaştırmalar düşünüldüğünde ikisi de birbirinin yerine kullanılabilir sanırım..

C dilinde çok iyi değilim, uzun zamandır da prog yazmadım C de, ama bir püf noktası yoksa true=1, false=0 olduğunu varsayarsak bit bazında doğru düşündüğümü sanıyorum.. Hatam nerde acaba ?



Katana hocam'ın uyarısı, değişken tipinin kritik olduğu ve benim önerimin yanlış anlaşılabileceği konusundaydı. Boolean değişkenler söz konusu olduğunda aslında hatanız yok. Fakat Ansi C'de boolean değişken yoktur, bu yüzden kafa karışıklığına sebep olmamak için A ve B değişkenleri boolean olsa da, if ((A == 1) && (B == 1)) gibi bir ifade kullanmak daha doğru olur
 
Hatanız burada!


Burada A ve B 1 ise anlamı oluşmaz. A ve B 0 dan farklı ise anlamı da oluşmaz.
A ve B birbirine eşit olan her hangi bir değer olabilir ve sonuç bu durumda 1 döner.

Dediğinize göre == operatörü ile && operatörü, değişkenlerden biri sıfır olmadığı sürece aynı kapıya çıkar.. Bence anlatımda hatanız var.. Ya da çok yüzeysel anlatıyorsunuz..


Katana hocam'ın uyarısı, değişken tipinin kritik olduğu ve benim önerimin yanlış anlaşılabileceği konusundaydı. Boolean değişkenler söz konusu olduğunda aslında hatanız yok. Fakat Ansi C'de boolean değişken yoktur, bu yüzden kafa karışıklığına sebep olmamak için A ve B değişkenleri boolean olsa da, if ((A == 1) && (B == 1)) gibi bir ifade kullanmak daha doğru olur

Hımm.. C++ da bool değişkeni vardı, VB de de var.. Ama ansi C de boolean olmadığını bilmiyordum.. Bitler yerine baytlar mı bool olarak kullanılıyor? Yani demek istediğiniz pic C için boolean değişken yoktur, bytelar üzerinden karşılaştırma yapılır.. Haliyle (A && B) karşılaştırması byte düzeyinde "ve" kapısından geçirilir ve sıfıra eşit olduğunda false, aksi halde true olur, anlamına mı geliyor..

Yine de şu eşitlik mevzunu anlamadım.. Byte düzeyinde karşılaştırma yapılıyorsa,, if ten sonraki parantezin içerisinin sıfıra eşit olduğu durumda komutlar işlenmez, aksi halde işlenir diye sanıyorum.. Örneklerle düşünecek olursak;
(0xAA && 0x55) = 0x00 işleminde komutlar işlenmez..
(0xAB && 0x55) = 0x01 işleminde komutlar işlenir..(ki eşit değiller)
Yanlış mıyım?
 
Yani demek istediğiniz pic C için boolean değişken yoktur, bytelar üzerinden karşılaştırma yapılır.. Haliyle (A && B) karşılaştırması byte düzeyinde "ve" kapısından geçirilir ve sıfıra eşit olduğunda false, aksi halde true olur, anlamına mı geliyor..

hayır, ama if(A==1) şeklinde yazılırsa okunurluk kolaylaşacaktır.


Hımm.. C++ da bool değişkeni vardı, VB de de var.. Ama ansi C de boolean olmadığını bilmiyordum.. Bitler yerine baytlar mı bool olarak kullanılıyor?

Standart değişken tiplerinde yok ama kullanmak isterseniz çeşitli yollarla tanımlayıp kullanabiliyorsunuz.

Diller arasında bu tip farklılıklar vardır, mesela java'da da unsigned değişken yok(char dışında)
 
Bence siz yazdıklarınızı ve yazdıklarımı inceleyin..
(0xAA && 0x55) = 0x00 işleminde komutlar işlenmez..
(0xAB && 0x55) = 0x01 işleminde komutlar işlenir..(ki eşit değiller)

Az evvel C++ kitabıma baktım.. Örneklerde ve kapısı değil ama veya kapısının işleyişine ait alttaki örneği vermiş.. Ayrıca if ten sonra gelen parantezin iç kısmı 0 ise false(yani komutlar işlenmez), 0dan farklı ise true(yani komutlar işlenir) şeklinde bir ifade de okudum.. Hatırladıklarım doğru yani..

int a,b,c;
..
..
..
if ((a) || (b) || (c))
printf("En az bir sayı sıfırdan farklıdır.");

Dediklerimi toparlamak gerekirse;
Eğer ki input(PIN_A0) değişkeni 1 ve 0 dışında bir değer döndürür diyorsanız, ona bişey diyemem.. Ama bu koşullarda;
(A && B) = (A==1 && B==1) olduğu konusunda ısrarcıyım.. Ayrıca alttaki yorumunuz da yanlış kanımca.. Verdiğim değerlerle inceleyin, bana yanlış göründü..

if (A && B):
A ve B, 0 dan farklı ve birbirine denk olduğu sürece fonksiyon işler.


Neyse eski bilgilerimle daha fazla tartışmak istemem..
C diline tekrar dönüş yaptığımda detaylıca tartışırız.. İyi forumlar..
 

Forum istatistikleri

Konular
128,171
Mesajlar
915,625
Kullanıcılar
449,935
Son üye
mehmetenessunger

Yeni konular

Geri
Üst