Aşağıdaki kod parçacığı için çıktıyı 1
olarak aldım. Nasıl geldiğini bilmek istiyorum?Operatör Öncelik - Ekspresyon Değerlendirmesi
void main()
{
int x=10,y=20,z=5,i;
i=x<y<z;
printf("%d",i);
}
Aşağıdaki kod parçacığı için çıktıyı 1
olarak aldım. Nasıl geldiğini bilmek istiyorum?Operatör Öncelik - Ekspresyon Değerlendirmesi
void main()
{
int x=10,y=20,z=5,i;
i=x<y<z;
printf("%d",i);
}
i=x<y<z;
, seni ne yaptığını çıkış 1.
kodunuzu olarak değerlendirir Bunun nedeni:
void main()
{
int x=10,y=20,z=5,i;
i=((x<y)<z); //(x<y) = true = 1, (1 < 5) = true
printf("%d",i);
}
nasıl kodunu değiştirmek ve değerlendirme bahsedebiliriz? uyarılar etkinse – Sadique
I (de muhtemelen diğer derleyiciler) derleyici yorumlanır kod –
olarak değerlendirilir sırayla i=1<z
olarak yorumlanır alır i=(x<y)<z
, olarak yorumlanır alır istemek? koşul yanlış olarak değerlendirilirse C
i = 2 < 3; //i == 1.
i = 4 < 3; //i == 0.
döndürülen değeri 0 ve 1 aksi takdirde. < z ((x < y) < z) olarak değerlendirilecek y
Ayrıca < x.
10, en az 20 olduğu, 1 ile sonuçlanır ve 1 1. C zincire ilişkisel operatörler yapan bazı diğer diller yok gibi elde edilen, en az 5'tir. aşağıdaki gibi
x<y // 1 as (10 < 20) will return 1
result of(x<y)<z // 1 as (1<5) will return 1
Bu çalışır: <
yana mantıksal ifadedir, yani 10<20
x<y
doğru yani 1'dir Bu yüzden, yani i
atanan 1 daha doğrudur 1<z
yani 1<5
olur. Yani i
böyle çok parçalı karşılaştırmalar desteklemez ++ 1.
C'dir.
x < y < z
(x < y) < z
olarak yorumlanır ve bu, daha sonra, x < y
belirlemek bu Boole az z
olup olmadığını görmek edilir.
nedenover at the software engineering StackExchange.
kendinizi bu yapmaya çalışıyor bulmak yerine bir boolean ile birleştirilmiş iki ayrı karşılaştırmalar gibi yazmak gerekir:
(x < y) && (y < z)
oldukça yaygın bir hata, en azından GCC gibi görünüyor nasıl çalıştığını göstermek için parantez ayarlamak, bir uyarı yazdırır: 'uyarı: karşılaştırmalar X <' gibi = Y < = Z 'matematiksel anlamlarına sahip değiller – Saytonurn