当前位置:网站首页>Langage C - démarrer - base - syntaxe - [opérateur, conversion de type] (vi)

Langage C - démarrer - base - syntaxe - [opérateur, conversion de type] (vi)

2022-07-04 08:48:00 Hu Anmin

Concepts de base de l'opérateur

Comme les opérateurs en mathématiques, CUn opérateur dans une langue est un symbole qui indique au Programme d'effectuer une opération arithmétique ou logique spécifique

Qu'est - ce qu'une expression: Les expressions sont des significations liées par des opérateurs,Déclarations avec résultats; Par exemple: a + b; C'est une expression arithmétique, Ça veut dire ajouter deux nombres, Le résultat de l'addition de deux nombres est le résultat de l'expression Attention!: L'expression doit avoir un résultat

Classification des opérateurs

Par fonction:

  • Opérateur arithmétique
  • Opérateur d'affectation
  • Opérateur relationnel
  • Opérateurs logiques
  • Opérateur de bits

Divisé par le nombre d'opérandes participant à l'opération:

  • Opération monoculaire , Un seul opérande Par exemple: : i++;
  • Opération binoculaire , Il y a deux opérandes Par exemple: : a + b;
  • Opération triculaire , CLa seule langue,Aussi connu sous le nom d'expression de point d'interrogation Par exemple:: a>b ? 1 : 0;

Priorité et combinabilité des opérateurs

Dans les manuels de maths de l'école primaire,On a juste appris"De gauche à droite,Multiplier et diviser puis ajouter et soustraire,Ceux entre parenthèses comptent d'abord", Cette phrase implique des questions de priorité et de combinabilité
CDans la langue,La priorité opérationnelle de l'opérateur est divisée en15 Niveau.1 Niveau le plus élevé,15 Niveau le plus bas

  • InCDans les expressions linguistiques,Opérateurs de différentes priorités, L'ordre de fonctionnement est exécuté de haut en bas
  • InCDans les expressions linguistiques,Opérateurs de même priorité, L'ordre de fonctionnement doit être exécuté dans la direction spécifiée par l'Union
    Insérer la description de l'image ici
    Insérer la description de l'image ici
    Insérer la description de l'image ici

Opérateur arithmétique

Insérer la description de l'image ici
Notes

  • Si les deux opérandes impliqués dans l'opération sont des entiers , Donc le résultat est aussi un entier
  • Si l'un des deux opérandes participant à l'opération est un nombre flottant , Donc le résultat doit être un nombre flottant
  • Opérateur de récupération, C'est essentiellement le quotient et le surplus des mathématiques ,Reste dans
  • Opérateur de récupération, Les deux opérandes participant à l'opération doivent être des entiers , Impossible d'inclure un nombre flottant
  • Opérateur de récupération, Le diviseur est inférieur au diviseur, Donc le résultat est divisé par
  • Opérateur de récupération, La positivité et la négativité du résultat de l'opération dépendent du diviseur , Ça n'a rien à voir avec le diviseur , Le diviseur est un nombre positif le résultat est un nombre positif ,Divisé par
  • C'est négatif, c'est négatif
  • Opérateur de récupération, Diviser par0, Les résultats sont les suivants:0
  • Opérateur de récupération, Diviser par0, Ça n'a aucun sens(Ne dis pas ça.)

Insérer la description de l'image ici
Insérer la description de l'image ici
Insérer la description de l'image ici

Opérateur d'affectation

Insérer la description de l'image ici

Opérateur d'affectation simple

Insérer la description de l'image ici

Opérateur d'affectation composé

Insérer la description de l'image ici

Combinability and priority

Insérer la description de l'image ici

Opérateur auto - incrémental et auto - décrémental

Dans la programmation,Souvent rencontré“i=i+1”Et“i=i-1” Ces deux opérations très courantes .C Le langage fournit deux opérateurs plus concis pour cette opération ,C'est - à - dire:++Et--
Insérer la description de l'image ici
Si elle apparaît dans une expression , Les symboles sont écrits avant et après.

  • Expression préfixe:++x, --x;Parmi euxxReprésente le nom de la variable, Complétez d'abord l'auto - augmentation et l'auto - diminution de la variable 1Opération,Réutiliserx La valeur de est utilisée comme
    Valeur;C'est - à - dire:“ Changez d'abord, puis utilisez ”, C'est - à - dire que la valeur de la variable change d'abord , Participer à l'opération avec la valeur de la variable

  • Expression du suffixe:x++, x--;D'abord.x La valeur actuelle de est la valeur de l'expression , Puis auto - augmentation et auto - diminution 1Opération.C'est - à - dire:“ Utiliser d'abord, puis changer ”,- Oui.
    C'est - à - dire qu'il faut d'abord participer à l'opération avec la valeur de la variable , La valeur de la variable est ensuite augmentée et diminuée

Auto - augmentation:

S'il n'y a qu'une seule variable, Peu importe.++ Écrivez devant ou derrière les variables +1Fonctionnement
Insérer la description de l'image ici
Si l'opération de participation auto - incrémentale
Insérer la description de l'image ici
Insérer la description de l'image ici
À déduire
Insérer la description de l'image ici
Insérer la description de l'image ici

Attention!:

  • Auto - augmentation、 L'auto - soustraction ne peut être utilisée que pour une seule variable , Tant qu'il s'agit d'une variable de type standard ,Qu'il soit entier、Type solide, Ou une variable de type caractère
    Attendez., Mais ne peut pas être utilisé avec des expressions ou des constantes ,Mauvaise utilisation: ++(a+b);
  • Essayez de ++ -- Seul, Essayez de ne pas mélanger avec d'autres opérateurs
    Insérer la description de l'image ici
    Remplacer par le code suivant
    Insérer la description de l'image ici
    C Les normes linguistiques ne sont pas clairement définies , Comment fonctionne la même variable dans la même expression après auto - augmentation ou auto - diminution , Différents compilateurs obtiennent des résultats différents , N'écrivez jamais ça dans le développement de l'entreprise
    Insérer la description de l'image ici

sizeofOpérateur

sizeof Peut être utilisé pour calculer une variable ou une constante 、 Nombre d'octets de mémoire pris par le type de données

Format standard: sizeof(Constante or Variables);

sizeof()Et+=、*= C'est aussi un opérateur composé , ParsizeofEt()Composé de deux parties, Mais représente un tout
Alors...sizeofPas une fonction, C'est un opérateur, La priorité de cet opérateur est 2

sizeofPlusieurs formes de:

// sizeof( Variables\Constante );
sizeof(10); 
char c = 'a'; 
sizeof(c);
//sizeof Variables\Constante;
sizeof 10; 
char c = 'a'; 
sizeof c;
// sizeof( Type de données);
sizeof(float); // Les parenthèses ne peuvent pas être omises pour les types de données 

Insérer la description de l'image ici

Opérateur de virgule

  • InCVirgule dans la langue“,”C'est aussi un opérateur.,Appelé opérateur virgule. Sa fonction est de relier plusieurs expressions pour former une expression,Expression appelée virgule
  • L'opérateur virgule récupère la valeur de chaque expression de gauche à droite , La valeur de la dernière expression entière de virgule est égale à
    Valeur
  • Format: Expression1,Expression2,… …,Expressionn;
#include <stdio.h>
 int main(){
    
     int a=2,b=4,x,y;
     y=(x=a+b,b+x); // Dans une expression virgule , La dernière opération est la valeur finale ,Et ensuite assigner une valeur ày
     printf("y=%d, x=%d \n",y,x);// y=10, x=6
    return 0;
}

Opérateur relationnel

Par défaut, Chaque mot de code correct que nous écrivons dans le programme est exécuté .Mais la plupart du temps,, Nous voulons exécuter un morceau de code seulement si une condition est remplie , Dans ce cas, une déclaration conditionnelle peut être utilisée pour compléter , Mais avant d'apprendre l'énoncé des conditions , Regardons d'abord quelques connaissances de base :

Comment déterminer si une condition est valide , C Le vrai et le faux dans la langue , InCDans la langue, Les conditions d'établissement sont appelées “C'est vrai.”, Une condition non valable est appelée “Faux”,Donc,,Déterminer si les conditions sont vraies, Est de juger les conditions “Vrai ou faux”

Comment juger le vrai ou le faux ?CDispositions linguistiques, Toute valeur est vraie ou fausse ,Tout non0Toutes les valeurs sont“C'est vrai.”,Seulement0Juste pour“Faux”.C'est - à - dire,108、-18、4.5、-10.5Attends.“C'est vrai.”,0Oui.“Faux

Insérer la description de l'image ici
L'opérateur relationnel fonctionne avec seulement 2Espèce:Si les conditions sont réunies,Le résultat est1,C'est - à - dire“C'est vrai.”; Si les conditions ne sont pas remplies,Résultats C'est tout.0,C'est - à - dire“Faux
Insérer la description de l'image ici
Insérer la description de l'image ici
Priorité et intégration
Insérer la description de l'image ici
Insérer la description de l'image ici
Attention!: Que ce soitfloatToujoursdouble Il y a des problèmes de précision , Évitez donc d'utiliser ==Déterminer si le nombre de points flottants est égal
Insérer la description de l'image ici

Opérateurs logiques

PrioritéNomSymboleDescription
2Logique non - opérateur!Opérateur monoculaire,Avec liaison droite
11Logique et opérateur&&Opérateur binoculaire,Avec liaison gauche
12Logique ou opérateur||Opérateur binoculaire,Avec liaison gauche

La logique n'est pas

Format: ! ConditionsA; (C'est faux,Faux faux faux faux faux faux faux faux faux faux faux faux faux faux faux faux faux faux faux faux faux faux faux faux faux faux faux faux faux faux faux faux faux faux faux faux faux faux faux faux faux faux faux faux faux faux faux faux faux faux faux faux faux faux faux faux faux)

Insérer la description de l'image ici

Logique et

Format: ConditionsA && ConditionsB;
Résultat de l'opération:Un faux est un faux , Ce qui veut dire que tout est vrai, alors c'est vrai
Processus de calcul:

  1. Toujours juger en premier "ConditionsA"Oui Non,Si"ConditionsA"Fondé,On verra."ConditionsB"Oui Non, Si"ConditionsB"C'est vrai.,Le résultat est1,C'est - à - dire:“C'est vrai.”
  2. Si"ConditionsA"Fondé,"ConditionsB"C'est faux.,Le résultat est0,C'est - à - dire:“Faux”
  3. Si"ConditionsA"C'est faux., Ne jugez plus jamais "ConditionsB"Oui Non, Parce que la logique n'est pas vraie tant qu'un résultat n'est pas vrai

Attention à l'utilisation: ConditionsA"Faux., "ConditionsB"Ne sera pas exécuté

Insérer la description de l'image ici
Insérer la description de l'image ici

Logique ou

Format: ConditionsA || ConditionsB;
Résultat de l'opération:C'est vrai.
Processus de calcul:

  1. Juge d'abord"ConditionsA"Oui Non
  2. Si"ConditionsA"C'est faux.,On verra."ConditionsB"Oui Non, Si"ConditionsB"Fondé,Le résultat est1,C'est - à - dire:“C'est vrai.”
  3. Si"ConditionsA"C'est faux.,"ConditionsB" Elle n'est pas non plus fondée , Le résultat est0,C'est - à - dire:“Faux”
  4. Si"ConditionsA"Fondé, Ne jugez plus jamais "ConditionsB"Oui Non, Parce que la logique ou un seul résultat est vrai

Attention à l'utilisation: "ConditionsA"C'est vrai., "ConditionsB"Ne sera pas exécuté

Insérer la description de l'image ici
Insérer la description de l'image ici

Opérateur tridimensionnel

Opérateur tridimensionnel,Il a besoin3 Les données ou expressions constituent une expression conditionnelle

Format1: Expression1?(RésultatsA):(RésultatsB)
Format2: Expression1?Expression2:Expression3
Exemple: Réussir l'examen ? Réussite : Échec;

Insérer la description de l'image ici

Règles d'évaluation : Si"Expression1"C'est vrai., Le résultat de l'opération de l'opérateur tridimensionnel est (RésultatsA),Sinon(RésultatsB)
Insérer la description de l'image ici
Insérer la description de l'image ici
On peut aussi faire des complications int res = a>b?a:(c>d?c:d);

Conversion de type

La conversion de type de données consiste à convertir les données (Variables、Valeur numérique、Résultat de l'expression, etc)Conversion d'un type à un autre.

Conversion automatique de type

La conversion automatique de type est le compilateur silencieusement、Implicitement、Conversion furtive du type de données,Cette transformation n'exige pas l'intervention du programmeur,Se produit automatiquement. La conversion automatique de type se produit lorsqu'un type de données est attribué à un autre type de variable ,Par exemple:

//100 - Oui. int Type de données,Doit être converti en float  Le type peut être attribué à la variable  f.
float f = 100;
//Encore une fois.:f - Oui. float Type de données,Doit être converti en int  Le type peut être attribué à la variable  n.
int n = f;

Dans une opération d'affectation, Les types de données diffèrent des deux côtés du numéro d'affectation , Vous devez convertir le type d'expression de droite en type de variable de gauche , Cela peut entraîner une distorsion des données , Ou une précision réduite ;Alors dis, La conversion automatique de type n'est pas nécessairement sûre . Pour les conversions de type dangereuses , Le compilateur donne généralement un avertissement .

Dans différents types d'opérations hybrides,Le compilateur convertit également automatiquement les types de données,Convertit d'abord toutes les données impliquées dans l'opération au même type,Puis on calcule.Les règles de conversion sont les suivantes:

  • La conversion est effectuée dans la direction où la longueur des données augmente,Pour s'assurer que la valeur n'est pas déformée,Ou la précision ne diminue pas.Par exemple,int Et long Lors de la participation à l'opération,D'abord. int Type de données converties en long Type avant calcul.
  • Toutes les opérations en virgule flottante sont effectuées avec une double précision,Même s'il n'y a que float Type,Aussi à convertir en double Type,Pour effectuer des calculs.
  • char Et short Lors de la participation à l'opération,Doit être converti en int Type.

La figure ci - dessous illustre plus visuellement cette règle de conversion.:
Insérer la description de l'image ici

unsigned C'est - à - dire unsigned int,Peut être omis pour le moment int,Écris seulement unsigned.

Exemple de conversion automatique de type :

#include<stdio.h>
int main(){
    
    float PI = 3.14159;
    int s1, r = 5;
    double s2;
    s1 = r * r * PI;
    s2 = r * r * PI;
    printf("s1=%d, s2=%f\n", s1, s2);
    return 0;
}

Dans l'évaluation de l'expressionr*r*PIHeure,r Et PI Sont convertis en double Type, Le résultat de l'expression est aussi double Type.Mais parce que s1 Entier, Donc le résultat de l'opération d'assignation reste entier ,J'ai laissé tomber la partie décimale, Cause de distorsion des données .

Forcer la conversion de type

La conversion automatique de type est le résultat de l'auto - évaluation du compilateur en fonction de l'environnement contextuel du Code , Parfois, ce n'est pas si “Intelligent”, Impossible de répondre à tous les besoins .Si nécessaire,Le programmeur lui - même peut également proposer explicitement dans son Code de faire une conversion de type,C'est ce qu'on appelle la conversion forcée de type.

La conversion automatique de type est silencieuse par le compilateur 、 Une conversion implicite de type , Il n'est pas nécessaire de l'incorporer dans le Code ; Le typage forcé est explicitement proposé par le programmeur 、 Une conversion de type qui doit être spécifiée par un code de format spécifique .En d'autres termes,, La conversion automatique de type n'exige pas l'intervention du programmeur , La conversion de type de force doit avoir une intervention du programmeur .

Le format de conversion de type forcé est: (type_name) expression

type_namePour le nouveau nom de type,expressionPour l'expression.Par exemple:

(float) a;   //Variable variable a Convertir en float Type
(int)(x+y);  //Mettez l'expression x+y Le résultat de int Taille
(float) 100; //Valeur numérique 100(Par défautintType)Convertir en float Type

Voici un exemple classique de conversion de type obligatoire :

#include <stdio.h>
int main(){
    
    int sum = 103;  //Total général
    int count = 7;  //Nombre
    double average;  //Moyenne
    average = (double) sum / count;
    printf("Average is %lf!\n", average); //Average is 14.714286!
    return 0;
}

sum Et count Tous. int Type, Sans intervention ,Alorssum / count Le résultat de l'opération de int Type, La partie décimale sera jetée ;Bien que average - Oui. double Type, Peut recevoir des fractions décimales , Mais le cœur n'a pas assez de force , La partie décimale est avancée par “Castration”C'est, Il ne peut recevoir que des parties entières , Il en résulte une distorsion importante du résultat de la Division .

Puisque average - Oui. double Type,Pourquoi ne pas utiliser pleinement, Maximiser la précision des résultats de calcul ?Pour atteindre cet objectif,On va juste sum Ou count L'un d'eux est converti en double Type OK.Dans le code ci - dessus,On va sum Force à double Type,Voilà.sum / count Et le résultat sera double Type, Pour conserver la fraction décimale ,average Les valeurs reçues seront également plus précises .

Dans ce code,Il y a deux choses à noter.:

  • Pour les opérations de division, Si le diviseur et le diviseur sont des entiers , Donc le résultat de l'opération est aussi un entier , La partie décimale sera jetée directement ; Si l'un des diviseurs et des diviseurs est décimal , Donc le résultat de l'opération est aussi décimal .
  • ( )Priorité supérieure à/,Pour les expressions(double) sum / count,Sera exécuté en premier(double) sum,Oui. sum Convertir en double Type, Et puis la Division , C'est comme ça que ça se passe double Type, Capacité de conserver les fractions décimales . Attention à ne pas écrire (double) (sum / count), Le résultat de l'opération sera 3.000000, La partie décimale ne peut toujours pas être conservée .

La conversion de type n'est que temporaire

Qu'il s'agisse d'une conversion automatique de type ou d'une conversion forcée de type , Ce n'est qu'une transition temporaire pour cette opération , Le résultat de la conversion est également sauvegardé dans un espace mémoire temporaire , Ne change pas le type ou la valeur des données .Voir l'exemple ci - dessous:

#include <stdio.h>
int main() {
    
    double total = 400.8;  //Prix total
    int count = 5;  //Nombre
    double unit;  //Prix unitaire
    int total_int = (int)total; //400
    unit = total / count; // 80.160000
    printf("total=%lf, total_int=%d, unit=%lf\n", total, total_int, unit); //total=400.800000, total_int=400, unit=80.160000
    return 0;
}

Par le code ci - dessus,On peut voir,total Bien que le type ait été converti à total_int ,Maistotal Le type de données original n'a pas changé , Donc à la fin, c'était une décimale , Cela signifie que la conversion de type ne prend que du temps pour le calcul actuel

Conversion automatique de type VS Forcer la conversion de type

InCDans la langue,Certains types peuvent être convertis automatiquement,Vous pouvez également forcer la conversion,Par exemple int À double,float À int Attendez.;Certains types ne peuvent être forcés que,Impossible de convertir automatiquement,Par exemple, ce que vous apprendrez plus tard void * À int *,int À char * Attendez..

Les types qui peuvent être convertis automatiquement doivent pouvoir être forcés ,Mais,Les types qui nécessitent une conversion forcée ne peuvent pas nécessairement être convertis automatiquement.Les types de données que nous avons appris,Peut être converti automatiquement,On peut encore forcer,Plus tard, nous apprendrons des types qui ne peuvent être convertis que par la force et non automatiquement.

Les conversions de type qui peuvent être effectuées automatiquement sont généralement moins risquées,Sans conséquences graves pour la procédure,Par exemple,int À double Pas de défauts,float À int Au mieux, c'est une distorsion numérique.Les conversions de type obligatoires sont généralement plus risquées,Ou se comporter bizarrement.,Par exemple,char * À int * C'est un changement étrange.,Ce qui conduit à des valeurs étranges,Encore une fois.,int À char * C'est une transition très risquée,Cela provoque généralement un crash du programme. Lors de l'utilisation de la conversion de type de force,Les programmeurs eux - mêmes doivent être conscients des risques potentiels.

Insérer la description de l'image ici

- Oui. -Collection-Attention-Faciliter l'examen et la réception des mises à jour plus tard
D'autres questions sont abordées dans la section commentaires-Ou me faire confiance.-Dès réception, nous vous répondrons
Merci beaucoup.,Coopération,J'espère que mes efforts vous aideront^_^

Disclaimer:Une partie du matériel de cet article provient du réseau,Le droit d'auteur appartient à l'auteur.,Si l'article existe/Photos/Utilisation inappropriée de l'audio et de la vidéo, etc.,N'hésitez pas à me contacter par courrier privé.
原网站

版权声明
本文为[Hu Anmin]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/185/202207040846252315.html