[Általános, elméleti kérdés] Hogyha egy logikai változónak, ami alapjáraton hamis (0) értékkel rendelkezik, adunk egy 0-tól eltérő számot értékül, akkor az az igazságértékén változtatni fog?
Ez nem általános és elméleti kérdés, ugyanis egy logikai változó igaz és hamis lehet, nem egy pozitív egész.
Azokbanb a nyelvekben, ahol számként van definiálva, ott így működik, hiszen kb arra kérdezel rá, hogy működik-e az értékadás...
Több nézőpont is létezik.
Most mondhat mindenki akármit, de csak elméletileg létezik a logikai változó. Memóriában ugyanúgy bináris számként jelenik meg. Így a legkisebb memória méretet fogja lefoglalni, amit a fordítóban szerepel. Tehát byte típus.
Lehet, hogy egyes nyelvekben előfordul a boolean, bool mint típus, de ez fejlesztési időben van csak. Futásilag vaj-mint kevésbé.
Így most mi ennek az ál/alisas neve, már fordító/fejlesztő válogatja. Így inkább már definiálni szokták ennek a megvalósítását.
1) Verzió:
0-ás érték a sikeresség (true), és minden más hibát generál (false). Lásd pl.
exit() függvények, C main visszatérését
2) Verzió:
0-ás a hamis (false) és minden más a igaz (true)
És most kapaszkodj:
Típus konverzió nélkül simán összehasonlíthatóak!
C++ kód:
---------
char c = 0;
int i = 11;
int j = 1;
bool bf = false;
bool bt = true;
if(c == bf) { ... } // logikai kifejezés: igaz
if(!i == bf) { ... } // logikai kifejezés: igaz
if(!!i == bt) { ... } // logikai kifejezés: igaz
if(!c == bt) { ... } // logikai kifejezés: igaz
if(j == bt) { ... } // logikai kifejezés: igaz
if(i == bt) { ... } // logikai kifejezés: hamis
----------
# 4/4 Időpont ma 19:27
"1) Verzió:
0-ás érték a sikeresség (true), és minden más hibát generál (false). Lásd pl.
exit() függvények, C main visszatérését "
LOL.
Kérdező:
Nyelvfüggő. Van ahol nem is enged konkrét számot hozzárendelni, de CPP-ben például úgy van ahogy mondod.
#5
Nem értem mi a bajod.
Ha így van definiálva a true/false, akkor miért ne lehetne?
boolean fgv1(int x) return (x > 0 || x < 0) ? true : false;
boolean fgv2(int x) return (x > 0 || x < 0) ? false : true;
Látod? Ennyit is ért a leszavazásod, ha így definiáljuk az adott értékből generálandó logikai értéket.
Szóval az állításaim továbbra is helytállóak.
Továbbá, most mond meg. Nem láttál még olyat, hogy:
Error Number?
Csak, hogy szemléltessem:
Legyen most Java: System.exit(n)
Dokumentáció: [link]
Persze ez egy válasz az oprendszernek a futást illetően. De végül is ez is egy státusz mutató.
És ha tovább gondoljuk: logikai igaz/hamis is egy státusz, állapotot mutat, hogy elfogadjuk vagy elvetjük a feltételt.
Ezt nyugodtan lepontozhatod, de érvelj is. Ha meg nem tudsz érvelni, akkor az olyan, hogy nem fogadod el az állítást, de egyben megcáfolni se tudod, hogy nincs igazam. :)
Az, hogy a fordító mit fogad el és mit nem, az már specifikus kérdés. És a kérdezőnek általánosítva mutattam be.
# 6/6 Időpont ma 20:00
Jobb körökben nem illik keverni a függvény/program visszatérési értékeit, hibajelzéseit, kivételeit, és a logikai változókat.
Eleve ott kezdődik, hogy a C nyelv main visszatérési érteke integer. Az, hogy ez (C nyelvben) implicit kiértékelhető logikaiként, annak semmi köze ahhoz, hogy ő 0-val tér vissza, ha hibamentesen véget ért.
A logikai változó olyan változó ami logikailag két értéket vehet fel: igazat és hamisat. Ne keverjük már bele hogy a fordító ezt hogyan kezeli le a memóriában mert annak semmi köze nincs az egészhez. Logikai kifejezéseket kiértékelhetsz és annak az eredményeit logikai változóban tárolhatod de az nem fog változtatni azon hogy mit nevezünk hamisnak és mit nevezünk igaznak. Nyilvánvaló hogy egy if(hamis_kif){ ... } soha nem fog lefutni.
Hiba azonosítókat és visszatérési értékeket pedig ne keverjünk bele mert semmi köze a témához. Valóban lehet csinálni egy olyan függvény hogy:
bool isFalse(int x) { return x==0; }
és akkor a "hamis" szám igazzal tér vissza, de azért mert az x==0 valóban egy igaz kifejezés ha 0 az x. Olyat még nem láttam ahol pl. a 3<5 kifejezés kiértékelése hamis eredményre jutott volna.
"Típus konverzió nélkül simán összehasonlíthatóak!"
Ez pedig nem igaz. A C++ implicit típuskonverziót csinál, a 0-t hamissá alakítja, a 0-nál különböző számot pedig igazzá ha booleannal hasonlítasz össze. Attól hogy nem kell explicit átkasztolnod az integert, még történik típuskonverzió. Abban igazad van, hogy programozási nyelv függő hogy hogyan kasztol a nyelv intből booleant vagy egyáltalán megengedi e, de konvenció hogy a 0 a hamis, a többi szám igaz. Én nem tudok olyan programozási nyelvről ahol a 0 lenne az igaz és a többi lenne a hamis, olyat ismerek amilyet a kérdező leírt, és olyat is ami nem engedi meg a típuskonverziót a kettő között.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!