La campana.

Ci sono quelli che hanno letto questa notizia prima di te.
Iscriviti per ricevere articoli freschi.
E-mail
Nome
Cognome
Come vuoi leggere la campana
Senza spam.

Dal momento che nel precedente articolo, ho usato per la prima volta un'operazione logica, ti dirò cosa sono, quanti e come li usano.

In C ++, ci sono tre operazioni logiche:

  1. Operazione logica e &&, siamo già conosciuti;
  2. Operazione logica o || ;
  3. Funzionamento logico NE. ! o negazione logica.

Le operazioni logiche formano una condizione complessa (composita) da diverse condizioni semplici (due o più). Queste operazioni semplificano più volte la struttura del codice del programma. Sì, puoi fare a meno di loro, ma il numero di IFO aumenta più volte, a seconda della condizione. La seguente tabella ha descritto brevemente tutte le operazioni logiche nel linguaggio di programmazione C ++ per creare condizioni logiche.

Ora dovresti capire la differenza tra l'operazione logica e l'operazione logica o per non confondere. È ora di conoscere il tipo di dati Bool -Logica. Questo tipo di dati può assumere due valori: true (verità) e false. La condizione controllata negli operatori di selezione ha un tipo di dati BOOL. Considera il principio di funzionamento del prossimo programma, e tutto sarà compreso con tutte queste operazioni logiche.

// o_and_not.cpp: specifica il punto di ingresso per l'applicazione della console. #Include "stdafx.h" #include Usando il namespace std; Int Main (int Argc, char * argv) (bool a1 \u003d true, a2 \u003d false; // annuncio di variabili logiche bool a3 \u003d true, A4 \u003d false; cout<< "Tablica istinnosti log operacii &&" << endl; cout << "true && false: " << (a1 && a2) << endl // логическое И << "false && true: " << (a2 && a1) << endl << "true && true: " << (a1 && a3) << endl << "false && false: " << (a2 && a4) << endl; cout << "Tablica istinnosti log operacii ||" << endl; cout << "true || false: " << (a1 || a2) << endl // логическое ИЛИ << "false || true: " << (a2 || a1) << endl << "true || true: " << (a1 || a3) << endl << "false || false: " << (a2 || a4) << endl; cout << "Tablica istinnosti log operacii !" << endl; cout << "!true: " << (! a1) << endl // логическое НЕ << "!false: "<< (! a2) << endl; system("pause"); return 0; }

Righe 9 e 10 Devi essere compreso, poiché i tipi di variabili vengono inizializzati qui. Bool . E ogni variabile è assegnata il valore Vero o falso. Iniziando con 9 ° Row. E finitura 20-y.Viene mostrato l'uso di operazioni logiche. Il risultato del programma (vedi figura 1).

Tablica Itinnosti Log Operacii && true && False: 0 False && True: 0 TRUE && TRUE: 1 FALSE && FALSE: 0 Tablica ISTINNOSTI Log Operacii || Vero ||. Falso: 1 falso || Vero: 1 vero || Vero: 1 falso || Falso: 0 Tablica ISTINNOSTI Log Operacii! ! Vero: 0! Falso: 1 Per continuare, premere un tasto qualsiasi. . .

Figura 1 - Operazioni logiche C ++

Probabilmente, hai una domanda, "quali sono questi tester e unità?". Se c'è una domanda, allora devi rispondere. Rispondo: "Nolik è una rappresentazione del valore logico di false (bugie), ma le unità sono una true logica (verità)." Spiega brevemente alcuni momenti. Condizione composta utilizzando logico E Vero solo quando entrambe le condizioni semplici sono vere. In tutti gli altri casi, la condizione composita è falsa. Condizioni composte utilizzando logiche o falsamente solo quando false entrambe le condizioni semplici. In tutti gli altri casi, la condizione composita è vera. Denial logico. NON è un'operazione univocata, e non combina due condizioni, a differenza delle operazioni logiche E e Oche sono operazioni binarie. La negazione logica consente di lanciare il significato della condizione che in alcuni casi è molto conveniente. La condizione con una negazione logica è vera se la stessa condizione è falsa senza negativo, e viceversa.

Qualsiasi espressione del linguaggio è costituito da operandi (variabili, costanti, ecc.) Collegati dai segni delle operazioni. Il segno di funzionamento è un simbolo o un gruppo di caratteri che segnalano il compilatore sulla necessità di eseguire determinate azioni aritmetiche, logiche o altre azioni.

Le operazioni vengono eseguite in una sequenza rigorosa. Il valore che determina il diritto preventivo per eseguire una particolare operazione è chiamata priorità. Nella scheda. 2 elencati varie operazioni della lingua SI (c). Le loro priorità per ciascun gruppo sono le stesse (i gruppi sono evidenziati per colore). Il maggiore vantaggio viene utilizzato il gruppo di operazioni corrispondente, maggiore è situato nella tabella. La procedura per l'esecuzione delle operazioni può essere regolata utilizzando parentesi.

Tabella 2 - Operazioni

Segno dell'operazione

Scopo dell'operazione

Call Function.

Assegnazione dell'elemento dell'array

Selezione dell'elemento di ingresso

Selezione dell'elemento di ingresso

Denial logico.

Denial Digital.

Cambio di segno

Uguaglianza per unità

Riduzione per unità

Prendere l'indirizzo

Appello all'indirizzo

Tipo Conversione (I.e. (Float) A)

Determinazione delle dimensioni nei byte

Moltiplicazione

Determinazione del saldo

Aggiunta

Sottrazione

Turno a sinistra

Passare a destra

Meno di

Meno o uguale

Più di

Più o uguale

Prestito logico "e"

Digit escludendo "o"

Prestito logico "o"

Logico "e"

Logico "o"

Funzionamento condizionale (Ternar)

Incarico

+=, - =, *=, /=, %=, <<=,
>>=, &=, |=, ^=

Operazioni binarie (ad esempio, A * \u003d B
(cioè a \u003d a * b), ecc.)

Operazione virgola

Operatore in SI (c)

Per escludere la confusione nei concetti di "operazione" e "operatore", notiamo che l'operatore è l'unità eseguibile più piccola del programma. Gli operatori dell'espressione si distinguono, l'azione del quale consiste nel calcolare le espressioni specificate (ad esempio: A \u003d peccato (B) + c; j ++;), operatori dell'annuncio, operatori compositi, operatori vuoti, operatori di etichetta, ciclo, ecc. . Per fare riferimento alla fine dell'operatore nella lingua SI (c), viene utilizzato un punto. Per quanto riguarda l'operatore composito (o il blocco), che è un insieme di operatori logicamente correlati effettuati da apertura (() e chiusura ()) parentesi ricci ("parentesi dell'operatore"), quindi il punto con una virgola non è inserito. Si noti che il blocco differisce dall'operatore composito dalla presenza di definizioni nel corpo del blocco.

Caratteristiche delle principali operazioni della lingua SI (c)

Caratteriamo le operazioni di base della lingua SI (c).

Operazione di assegnazione

Innanzitutto, considera uno di loro - l'operazione di assegnazione (\u003d). Espressione di tipo.

assegna il valore X variabile della variabile y. Funzionamento "\u003d" è permesso usare più volte in un'espressione, ad esempio:

x \u003d y \u003d z \u003d 100;

Distinguere le operazioni unirisme e binarie. Nel primo di questi, un operando e il secondo - due. Iniziamo la loro considerazione dalle operazioni relative al primo dei seguenti gruppi tradizionali:

Operazioni aritmetiche.

Operazioni logiche e relazioni relazionali.

Operazioni con bit.

Le operazioni aritmetiche sono impostate dai seguenti simboli (Tabella 2): +, -, *, /,%. L'ultimo non può essere applicato a una variabile di tipo reale. Per esempio:

a \u003d B + C;
x \u003d y - z;
R \u003d t * v;
s \u003d k / l;
P \u003d q% w;

Operazioni logiche

Le operazioni di relazione logiche sono impostate dai seguenti simboli (vedi tabella 2): && ("e"), || ("O"), ! ("Non"),\u003e,\u003e \u003d,<, <= , = = (равно), != (не равно). Традиционно эти операции должны давать одно из двух значений: истину или ложь. В языке СИ (C)принято следующее правило: истина - это любое ненулевое значение; ложь - это нулевое значение. Выражения, использующие логические операции и операции отношения, возвращают 0 для ложного значения и 1 для истинного. Ниже приводится таблица истинности для логических операций.

Le operazioni di bit possono essere applicate alle variabili che hanno Int, Char Tips, nonché le loro varianti (ad esempio, lungo INT). Non possono essere applicati a tipi variabili di galleggiante, doppio, void (o tipi più complessi). Queste operazioni sono impostate dai seguenti simboli: ~ (Denial Bonnetal),<< (сдвиг влево), >\u003e (Sposta a destra), & (Bonnet "e"), ^ (Bits escludendo "o"), | (Cifra "o").

Esempi: se a \u003d 0000 1111 e B \u003d 1000 1000, quindi

~ A \u003d 1111 0000,
UN.<< 1 = 0001 1110,
A \u003e\u003e 1 \u003d 0000 0111,
A & B \u003d 0000 1000,
a ^ b \u003d 1000 0111,
A | B \u003d 1000 1111.

La lingua prevede due operazioni di incremento non tradizionali (++) e decremento (-). Sono progettati per aumentare e diminuire il valore dell'operando. Operation ++ e - può essere registrato sia davanti all'operando che dopo. Nel primo caso (++ n or -n), il valore dell'operando (N) cambia prima del suo utilizzo nell'espressione appropriata e nel secondo (N ++ o N--) - dopo il suo utilizzo. Considera le seguenti due righe del programma:

a \u003d B + C ++;
A1 \u003d B1 +++ C1;

Supponiamo che B \u003d B1 \u003d 2, c \u003d c1 \u003d 4. Quindi dopo aver eseguito le operazioni: A \u003d 6, B \u003d 2, c \u003d 5, A1 \u003d 7, B1 \u003d 2, c1 \u003d 5.

Le espressioni con un altro funzionamento ternario o condizionale non tradizionale sono diffuse. Nella formula

y \u003d A, se x non è zero (cioè, vero), e y \u003d b, se x è zero (falso). Prossima espressione

y \u003d (a\u003e b)? A: B;

consente di assegnare una variabile nel valore di una variabile maggiore (A o B), I.e. y \u003d max (a, b).

Un'altra distinzione della lingua è che l'espressione della forma A \u003d A + 5; può essere scritto in un'altra forma: A + \u003d 5;. Invece di un segno + puoi usare i simboli di altre operazioni binarie (vedere la Tabella 2).

Altre operazioni da tavolo. 2 sarà descritto nei paragrafi successivi.

I cicli sono organizzati per eseguire alcuni operatori o gruppo di operatori un certo numero di volte. Nella lingua SI (c), tre operatori del ciclo: per, mentre e fanno - mentre. Il primo di loro è scritto formalmente, nella seguente forma:

per (espressione_1; expression_2; expression_3) body_tsikla

Il corpo del ciclo è un operatore o più operatori racchiusi in parentesi ricci (...) (dopo che il punto di blocco con una virgola non è posizionato). In espressioni 1, 2, 3 appare una variabile speciale chiamata controllo. Per il suo valore, è stabilita la necessità di un ciclo di ripetizione o uscita da esso.

Expression_1 assegna il valore iniziale della variabile di controllo, l'espressione_s lo modifica ad ogni passaggio e l'espressione_2 controlla se ha raggiunto il valore limite che stabilisce la necessità di uscire dal ciclo.

per (i \u003d 1; io< 10; i++)

per (Сh \u003d "A"; CH! \u003d "P";) Scanf ("% c", & ch);

/ * Il ciclo verrà eseguito fino alla tastiera

il simbolo "P" * /

Una qualsiasi delle tre espressioni nel ciclo poiché può essere assente, tuttavia, il punto con una virgola dovrebbe rimanere. Quindi, per (;;) (...) è un ciclo infinito, da cui è possibile uscire solo in altri modi.

Nel linguaggio SI (c), viene presa la seguente regola. Qualsiasi espressione con un'operazione di assegnazione allegata tra parentesi è uguale a assegnata. Ad esempio, l'espressione (A \u003d 7 + 2) è 9. Dopodiché, è possibile scrivere un'altra espressione, ad esempio: ((A \u003d 7 + 2)<10), которое в данном случае будет всегда давать истинное значение. Следующая конструкция:

((Sh \u003d getch ()) \u003d\u003d "i")

consente di inserire il valore della variabile CH e dare il risultato vero solo quando il valore inserito è la lettera "I". Tra parentesi, è possibile registrare diverse formule che costituiscono un'espressione complessa. Per questi scopi, viene utilizzata l'operazione della virgola. Le formule saranno calcolate da sinistra a destra, e tutta l'espressione prenderà il valore dell'ultima formula calcolata. Ad esempio, se ci sono due variabili di tipo Char, quindi espressione

z \u003d (x \u003d y, y \u003d getch ());

definisce le seguenti azioni: il valore della variabile Y è assegnato alla variabile X; Un simbolo della tastiera viene introdotto e assegnato alla variabile Y; z ottiene il valore della variabile y. Le parentesi sono necessarie qui, poiché l'operazione della virgola ha una priorità inferiore rispetto all'operazione di assegnazione registrata dopo la variabile Z. L'operazione della virgola è ampiamente utilizzata per costruire le espressioni del ciclo per il ciclo e consente di modificare simultaneamente i valori di diverse variabili di controllo.

Le strutture investite sono consentite, cioè. Nel corpo di un ciclo, può verificarsi altri per gli operatori.

L'affermazione mentre è formalmente scritta in questa forma:

while (espressione) body_tsikla

L'espressione tra parentesi può prendere valore non zero (true) o zero (falso) valore. Se è veramente, il corpo del ciclo viene eseguito e l'espressione viene calcolata di nuovo. Se l'espressione è falsa, allora finisce il ciclo.

La dichiarazione di do-while è formalmente scritta come segue:

fare (corpo_cyklla) mentre (espressione);

La principale differenza tra il tempo e fare i cicli, mentre il corpo nel ciclo è eseguito almeno una volta. Il corpo del ciclo verrà eseguito fino a quando l'espressione tra parentesi impiegherà un valore falso. Se è falso quando si entra nel ciclo, il suo corpo viene eseguito esattamente una volta.

Il nidificazione di alcuni cicli agli altri è permesso, cioè. Nel corpo di qualsiasi ciclo, operatori per, mentre e fare - mentre possono apparire.

Nel corpo del ciclo, è possibile utilizzare le nuove interruzioni e continuare gli operatori. L'operatore di interruzione fornisce un'uscita immediata dal ciclo, l'operatore Continua provoca la cessazione della successiva e dell'inizio della prossima iterazione.

Operatori di transizione condizionali e incondizionati

Per organizzare transizioni condizionali e incondizionate nel programma SI (c) (c), gli operatori sono utilizzati: se - altrimenti, switch e goto. Il primo è scritto come segue:

se (check_linking) operator_1; Altrimenti operatore_2;

Se la condizione tra parentesi prende il valore reale, l'operatore_1 viene eseguito se il falso operatore_2. Se invece di uno è necessario eseguire diversi operatori, allora sono bretelle ricci. Nella dichiarazione IF, la parola altrimenti potrebbe essere assente.

Nell'affermazione se - altrimenti direttamente dopo le parole chiave IF e altro deve seguire altri operatori. Se almeno uno di questi è un operatore se è chiamato investito. Secondo l'accordo adottato nell'accordo SI (c), la parola altrimenti si riferisce sempre al più vicino se prima di esso.

L'operatore dell'interruttore consente di scegliere una delle diverse alternative. È scritto nella seguente forma formale:

interruttore (espressione)

caso Constanta_1: operatori_1;

caso Constanta_2: operatori_2;

........ ........

default: operator_default;

Qui viene calcolato il valore di un'espressione intera tra parentesi (a volte viene chiamato il selettore) ed è confrontato con tutte le costanti (espressioni costanti). Tutte le costanti devono essere diverse. Durante la corrispondenza, viene eseguita una versione appropriata degli operatori (uno o più operatori). Un'opzione con una parola chiave predefinita è implementata se nessun altro si è avvicinato (potrebbe mancare la parola predefinita). Se il valore predefinito è assente e tutti i risultati del confronto sono negativi, non viene eseguita alcuna opzione.

Per interrompere i controlli di follow-up dopo una scelta riuscita di qualche opzione, viene utilizzato l'operatore di interruzione, fornendo un'uscita immediata dall'interruttore.

Disegni degli switch investiti.

Considera le regole per eseguire una transizione incondizionata che può essere presentata nella seguente forma:

etichetta di goto;

L'etichetta è qualsiasi identificatore dopo il quale viene consegnato il colon. L'operatore GOTO indica che il programma deve essere continuato dall'operatore, prima della quale è registrata l'etichetta. L'etichetta può essere messa davanti a qualsiasi operatore nella funzione in cui l'operatore GOTO corrisponde ad esso. Non dovrebbe essere annunciato.

Turbo Debugger supporta pienamente la sintassi delle espressioni delle espressioni SI (c). L'espressione è composta da una miscela di operazioni, righe, variabili

Tag: Operatori logici SI, rifiuto logico, logico non,!, Logico o aggiunto logico, o, moltiplicazione logica, logica e e, procedura per l'esecuzione di operatori logici

Operatori logici

Le dichiarazioni OGIC sono operatori che accettano valori logici come argomenti (false o verità) e restituiscono un valore logico. Come i soliti operatori, possono essere single (non uniti, cioè prendere una discussione), bidimensionale (binario, prendere due argomenti), sciocchezze, ecc.

Una caratteristica del linguaggio SI è che non c'è alcun tipo in esso che memorizza il valore booleano (falso o verità). In un sollevamento (zero logico), è considerato un intero 0, e qualsiasi intera non zero sarà una verità logica. per esempio

#Includere. #Includere. void principale () (char boolvaluet \u003d -71; if (boolvalue) ("boolvalue è vero");) altro (printf ("boolvalue è falso");) _getch ();)

I valori logici sono solitamente generati da operatori di confronto (\u003d\u003d ,! \u003d,\u003e,<, >=. <=).

La lingua C mostra tre operatori logici: e, o meno. Iniziamo con il più semplice

Denial logico.

Informazioni sul Perator non è (non) utilizzato per invertire il valore dell'argomento. Quelli. Se la verità è stata trasferita a lui, sarebbe tornato una bugia se ha ricevuto una bugia come argomento, allora la verità sarebbe tornata.

Operatore logico NE.
X. Non x.
0 1
1 0

In C Denial è rappresentato dall'operatore!. per esempio

#Includere. #Includere. void principale () (int i \u003d 0; if (i) (printf ("I è vero \\ n");) se (! i) (printf ("I non è vero \\ n");) se (!! i) (printf ("I non è vero \\ n");) se (!!! i) (printf ("non non è vero \\ n");) _getch ();)

Come nella logica convenzionale, la legge degli atti a doppia negazione qui - la negazione della negazione può essere omessa.

I.

Informazioni sul Perator e (e, la moltiplicazione logica) restituisce la verità se e solo se entrambi gli argomenti sono vere.


Operatore logico I.
X. Y. Xey.
0 0 0
0 1 0
1 0 0
1 1 1

Nella moltiplicazione logica SI è rappresentato dall'operatore &&. Ad esempio, il compito - solo cittadini maschi adulti sono ammessi nel cerchio dei spaziatori militari. Cioè, solo uno può diventare un contendente per il quale due condizioni sono simultaneamente vere

#Includere. Void Main () (Char Gender; Int Age Unsigned; PrintF ("Inserire il genere (" M "o" F ") \\ N"); Scanf ("% c", & Gender); Printf ("Inserire Età \\ N" ); Scanf ("% u", ed età); IF (GENERE \u003d\u003d "M" && Age\u003e 17) (Printf ("Wellcome");) Altrimenti (Printf ("Vai via");) _Getch (); )

L'operatore può essere utilizzato costantemente a diversi argomenti. Per lui, ci sono leggi associative e commutative. Migliora il programma, introdurremo anche la crescita:

#Define _crt_secure_no_warnings #include. #Includere. Void Main () (Char Gener Gender; Int Age Unsigned, int altezza; stampaf ("Inserire il genere (" M "o" f ") \\ n"); scanf ("% c", e genere); PrintF ("Invio Età \\ n "); scanf ("% u ", ed età); printf (" enter height \\ n "); scanf ("% u ", e altezza); IF (GENERE \u003d\u003d" M "&& Age\u003e 17 && altezza\u003e \u003d 180) (printf ("wellcome");) altro (printf ("vai via");) _getch ();)

Anche le condizioni potrebbero essere registrate

(Genere \u003d\u003d "M" && Age\u003e 17) && Altezza\u003e \u003d 180

GENERE \u003d\u003d "M" && (Age\u003e 17 && altezza\u003e \u003d 180)

(Età\u003e 17 && altezza\u003e \u003d 180) && Genere \u003d\u003d "m"

Logico o

A proposito del Perator logico o (aggiunta logica o) è vera quando la verità è almeno un argomento.


Operatore logico o
X. Y. X o y.
0 0 0
0 1 1
1 0 1
1 1 1

In SI o presentato dall'operatore || Ad esempio, migliorerai il programma: ora il pavimento può essere inserito sia una lettera grande che piccola

#Define _crt_secure_no_warnings #include. #Includere. Void principale () (Char GenderInput; Char Gender, Int Age; Unsigned Int Age; Unsigned Int Height; PrintF ("Inserire il genere (" M "o" F ") \\ n"); Scanf ("% c" e GenderInput); Printf ("Inserire l'età \\ n"); scanf ("% u", ed età); printf ("Invio altezza \\ n"); scanf ("% u", e altezza); IF (GenderInput \u003d\u003d "M" | | GenderInput \u003d \u003d "M") (Gender \u003d 1;) Else (Gender \u003d 0;) IF ((Age\u003e 17 && altezza\u003e \u003d 180) && Genere) (printf ("wellcome");) altro (printf (" Vai via ");) _getch ();)

Come nel caso dell'operatore e, o commutativo e associativo.

Gli operatori possono essere mescolati l'uno con l'altro creando operatori complessi

#Define _crt_secure_no_warnings #include. #Includere. Void Main () (Char Gener Gender; Int Age Unsigned, int altezza; stampaf ("Inserire il genere (" M "o" f ") \\ n"); scanf ("% c", e genere); PrintF ("Invio Età \\ n "); scanf ("% u ", ed età); printf (" enter height \\ n "); scanf ("% u ", e altezza); se ((età\u003e 17 && altezza\u003e \u003d 180) && (Gender \u003d\u003d "M" || Genere \u003d\u003d "M")) (printf ("wellcome");) altro (printf ("vai via");) _getch ();)

Vale la pena ricordare che l'operatore negato ha una priorità maggiore di o o o o, quindi verrà eseguita per primo. Se la situazione può accadere quando l'ordine di esecuzione non è chiaro, determinarlo utilizzando parentesi.

Esempio: De Morgana Legge. Per cambiare e su o (o viceversa), è necessario invertire i valori di tutti gli operandi, sostituire entrambi o (o o o) e) e invertire il risultato finale. Nel caso della nostra condizione

(Età\u003e 17 && altezza\u003e \u003d 180) && (Genere \u003d\u003d "M" || Genere \u003d\u003d "M")

Considera il primo un pezzo

(Età\u003e 17 && altezza\u003e \u003d 180)

Cambiamo tutti i valori per il retro

(! (Età\u003e 17) &&! (Altezza\u003e \u003d 180))

sostituiamo l'operatore && On ||

(! (Età\u003e 17) ||! (Altezza\u003e \u003d 180))

e invertire la risposta

! (! (Età\u003e 17) ||! (Altezza\u003e \u003d 180))

Come puoi vedere, il risultato è lo stesso. È ovvio

! (Età\u003e 17)

equivalente

Età.<= 17

Quindi, cambia la condizione

! (Età.<= 17 || height < 180)

Cambia la seconda staffa allo stesso modo.

(Genere \u003d\u003d "M" || Genere \u003d\u003d "M")

! (Genere! \u003d "M" && Genere! \u003d "M")

! (Età.<= 17 || height < 180) && !(gender != "M" && gender != "m")

Ora puoi applicare la stessa regola e per l'intera espressione.

! ((Età<= 17 || height < 180) || (gender != "M" && gender != "m"))

La procedura per eseguire operatori logici

P Assicure Expression

A && B && C && D

dove A, B, C, D è valori logici. Tutta l'espressione è uguale alla verità allora e solo se tutti gli operandi sono vere. Se almeno uno degli operandi si trova, il resto non è più importante. Pertanto, per ottimizzare il lavoro, il calcolo avviene da sinistra a destra e si arresta non appena il primo operando è stato trovato uguale a zero.

In SI, l'operatore di assegnazione può restituire un valore. A volte è usato direttamente sulla condizione:

#Define _crt_secure_no_warnings #include. #Includere. #Includere. void principale () (int a \u003d 0; int * p \u003d se (a && (p \u003d (int *) malloc (sizeof (int) * 2))) (printf ("memoria è stata assegnata");) gratis (p ); _Getch ();)

In questo caso, l'operatore di malloc non verrà eseguito, dal momento che il primo operando A è 0 (rispettivamente, l'intera espressione è zero). Pertanto, la dichiarazione libera proverà a cancellare la memoria che non può essere pulita (perché P continuerà a fare riferimento a a). Se cambiamo A \u003d 1, tutto funzionerà senza problemi.

Lo stesso accade quando si esibisce ||. Espressione

A ||. B ||. C ||. D.

viene eseguito da sinistra a destra fino a quando il primo valore non zero incontra. Dopodiché, l'esecuzione si ferma, come è noto che l'intera espressione è uguale alla verità.

Nota. Tutte le operazioni con conseguente valore di tipo BOOL

Confrontare le operazioni e le operazioni logiche comportano un valore di tipo BOOL, cioè vero o falso. Se tale espressione si verifica nel contesto che richiede l'intero valore, il vero viene convertito in 1, e il falso è in 0. Ecco un frammento del codice che conta il numero di elementi vettoriali più piccoli di alcuni valore specificati:

Vettore :: Iterator ITER \u003d IVEC.BEG-IN (); While (iter! \u003d IVEC.End ()) (// equivalente: E1EM_CNT \u003d E1EM_CNT + (* ITER< some_va1ue) // значение true/false выражения *iter < some_va1ue // превращается в 1 или 0 e1em_cnt += *iter < some_va1ue; ++iter; }

Aggiungiamo semplicemente il risultato dell'operazione "meno" allo strumento. (Coppia + \u003d indica un'istruzione di assegnazione composita, che piega l'operando a sinistra, e l'operando che è in piedi a destra. Lo stesso può essere scritto più compatto: elem_count \u003d elem_count + n. Guarderemo tali operatori nella sezione 4.4.)
Logico e (&&) restituisce la verità solo quando entrambi gli operandi sono vere. Logico o (||) dà la verità se almeno uno degli operandi è vero. È garantito che gli operandi sono calcolati da sinistra a destra e il calcolo termina non appena il valore risultante diventa noto. Cosa significa? Lascia che vengano fornite due espressioni:

Expr1 && expr2 expr1 || Expr2.

Se nel primo di questi, EXPR1 è falso, il valore dell'intera espressione sarà anche uguale a falso, indipendentemente dal valore EXPR2, che non sarà nemmeno calcolato. Nella seconda espressione, EXPR2 non è stimato se EXPR1 è vero, dal momento che il valore dell'intera espressione è vero, indipendentemente dall'ESPR2.
Questo metodo di calcolo consente di effettuare un controllo conveniente di diverse espressioni in un unico operatore e:

While (ptr! \u003d O && ptr-\u003e vayue< upperBound && ptr->vA1UE\u003e \u003d 0 && noTFOUND (IA [PTR-\u003e VA1UE])) (...)

Il puntatore del valore zero non indica alcun oggetto, pertanto, l'utilizzo di funzionamento dell'accesso al puntatore zero al membro causerà un errore (valore Ptr-\u003e). Tuttavia, se PTR è 0, il controllo del primo passo cessa di calcolare ulteriormente le sovvenzioni. Allo stesso modo, il valore del valore PTtr-\u003e viene controllato nel secondo e terzo passaggio all'intervallo desiderato e l'uso dell'indice non si applica all'array IA, se questo indice non è corretto.
L'operazione logica non dà true se il suo unico operatore è falso, e viceversa. Per esempio:

BOOL Trovato \u003d falso; // Mentre l'articolo non viene trovato // e PTR indica un oggetto (non 0) mentre (! Trovato && PTR) (trovato \u003d 1ookup (* PTR); ++ PTR;)

Sottosezione

Dà true se la variabile trovata è uguale a false. Questa è una voce più compatta per

Trovato \u003d\u003d falso.

Allo stesso modo

Equivalente alla registrazione più lunga

Se (trovato \u003d\u003d true)

L'uso delle operazioni di confronto è abbastanza ovvio. Abbiamo solo bisogno di tenere presente che, in contrasto con e e o, la procedura per calcolare gli operandi di tali espressioni non è definita. Ecco un esempio in cui è possibile un errore simile:

// ATTENZIONE! La procedura per i calcoli non è definita! IF (IA [INDICE ++]< ia[ index ]) // поменять местами элементы

Il programmatore ha assunto che l'operando sinistro viene valutato per primo e gli elementi di IA e IA saranno confrontati. Tuttavia, il compilatore non garantisce i calcoli da sinistra a destra, e in questo caso l'elemento IA può essere confrontato con se stesso. È molto meglio scrivere codice più comprensibile e indipendente dalla macchina:

IF (IA [INDICE]< ia[ index+1 ]) // поменять местами элементы ++index;

Un altro esempio di un possibile errore. Volevamo assicurarci che tutte e tre le variabili di Ital, Jval e Kval differiscano. Dove ci è mancato?

// ATTENZIONE! Questo non è un confronto di 3 variabili l'una con l'altra se (ival! \u003d JVA1! \u003d KVA1) // fai qualcosa ...

I valori di 0, 1 e 0 danno come risultato del calcolo di tale espressione vera. Perché? Innanzitutto, l'Ital viene controllato! \u003d JVAL, e quindi il risultato di questo controllo (vero / falso - trasformato in 1/0) è confrontato con KVAL. Abbiamo dovuto scrivere chiaramente:
Se (ival! \u003d JVA1 && Ival! \u003d KVA1 && JVA1! \u003d KVA1)
// fare qualcosa...

Esercizio 4.4.

Trova le espressioni sbagliate o intollerabili, spiegano. Come possono cambiarli? (Si noti che i tipi di oggetti non riproducono ruoli in questi esempi.)
(a) PTR-\u003e IVA1! \u003d 0
(C) PTR! \u003d 0 && * PTR ++
(E) VEC [IVA1 ++]<= vec[ ival ];
(b) Ival! \u003d JVA1< kva1 (d) iva1++ && ival

Esercizio 4.5.

La lingua C ++ non detta la procedura per il calcolo delle operazioni di confronto per consentire al compilatore di farlo in modo ottimale. Quale pensi che costerebbe in questo caso per sacrificare l'efficienza per evitare errori relativi all'assunzione sul calcolo dell'espressione da sinistra a destra?

Operatori di relazione e operatori logici

Nella notazione operatore della relazione e operatore logico. termine relazioni significa la relazione che può esistere tra due valori e il termine logico - La relazione tra i valori logici della "verità" e "menzogna". E poiché gli operatori della relazione danno risultati veri o falsi, vengono spesso utilizzati insieme a operatori logici. È per questo motivo che sono considerati congiuntamente.

Di seguito sono riportati gli operatori della relazione:

Il logico include operatori di seguito:

Il risultato dell'esecuzione dell'operatore della relazione o dell'operatore logico è il valore logico del tipo BOOL.

In generale, gli oggetti possono essere confrontati con l'uguaglianza o la disuguaglianza utilizzando gli operatori di relazione \u003d\u003d e! \u003d. E gli operatori di confronto, \u003d possono essere utilizzati solo nei tipi di dati che supportano il rapporto ordine. Di conseguenza, gli operatori relazionali possono essere applicati a tutti i tipi di dati numerici. Ma i valori del tipo BOOL possono essere confrontati solo con uguaglianza o disuguaglianza, poiché i valori veri (true) e falsi (falsi) non vengono ordinati. Ad esempio, il confronto del vero\u003e falso in c # non ha senso.

Considera un esempio di un programma che dimostra l'uso di relazioni e operatori logici:

Usando il sistema; usando sistema.Collections.genic; Usando il sistema.linq; Usando il sistema.Text; Namespace consoleapplication1 (stringa args (stringa Void d \u003d 10, f \u003d 12; bool var1 \u003d true, var2 \u003d false; se (df) console.writeline ("d\u003e f"); // confrontando le variabili var1 e var2 se (Var1 & Var2) console.Writeline ("Questo testo non disabiliterà"); IF (! (VAR1 & VAR2)) console.Writelline ("! (VAR1 & VAR2) \u003d true"); IF (VAR1 | VAR2) console.Writeine ("VAR1 | Var2 \u003d true"); IF (VAR1 ^ VAR2) console.Writeline ("Var1 ^ var2 \u003d true"); console.readline ();)))

Operatori logici in C # Esegui le operazioni logiche più comuni. Ciononostante, ci sono un certo numero di operazioni eseguite dalle regole della logica formale. Queste operazioni logiche possono essere costruite utilizzando operatori logici supportati in C #. Di conseguenza, in c # c'è una tale serie di operatori logici, che è sufficiente per costruire quasi tutte le operazioni logiche, comprese le implicazioni. Amplice - Questa è un'operazione binaria, il cui risultato è un valore falso solo se il suo operando sinistro ha un vero significato, e quello giusto è falso. (L'operazione di implicazione riflette il seguente principio: la verità non può implicare una bugia.)

L'operazione di implicazione può essere costruita sulla base di una combinazione di operatori logici! e |:

Operatori logici abbreviati

C # ha anche speciali, grasso solido vegetale o animale per cucinare, Opzioni per gli operatori logici e o, progettati per ottenere un codice più efficiente. Spieghiamo nei seguenti esempi di operazioni logiche. Se il primo operando di un'operazione logica e ha un falso valore (falso), il suo risultato avrà un valore falso indipendentemente dal valore del secondo operando. Se il primo operando di un'operazione logica o ha un vero valore (vero), il suo risultato avrà un valore vero indipendentemente dal valore del secondo operando. A causa del fatto che il valore del secondo operando in queste operazioni non deve essere calcolato, risparmia tempo e aumenta l'efficienza del codice.

Un'operazione logica abbreviata ed è eseguita utilizzando operatore &&e un'operazione logica abbreviata o - con operatore ||.. Questi operatori logici abbreviati corrispondono a ordinari operatori logici & e |. L'unica differenza tra l'operatore logico abbreviato dalle solite bugie nel fatto che il suo secondo operando è calcolato solo secondo necessità.

La campana.

Ci sono quelli che hanno letto questa notizia prima di te.
Iscriviti per ricevere articoli freschi.
E-mail
Nome
Cognome
Come vuoi leggere la campana
Senza spam.