2011-03-28 24 views

cevap

7

i=x<y<z;, seni ne yaptığını çıkış 1.

+0

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

0

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); 
} 
+0

nasıl kodunu değiştirmek ve değerlendirme bahsedebiliriz? uyarılar etkinse – Sadique

+0

I (de muhtemelen diğer derleyiciler) derleyici yorumlanır kod –

0

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.

2

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

0
x<y // 1 as (10 < 20) will return 1 
result of(x<y)<z // 1 as (1<5) will return 1 
1

Bu çalışır: < yana mantıksal ifadedir, yani 10<20x<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.

0

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)