Why do I get errors in Bash arithmetic?

Aritmetiske Operatorer i C: En Komplet Guide

17/05/2003

Rating: 4.89 (2240 votes)

At forstå, hvordan man udfører beregninger, er en fundamental del af programmering. I programmeringssproget C er dette muliggjort gennem et sæt kraftfulde aritmetiske operatorer. Disse værktøjer giver os mulighed for at udføre alt fra simpel addition og subtraktion til mere komplekse operationer som division og restværdi. Uden en solid forståelse af disse operatorer og deres indbyrdes hierarki, er det næsten umuligt at skrive funktionel og effektiv kode. Denne artikel vil guide dig igennem de forskellige aritmetiske operatorer i C, forklare deres funktioner, vise forskellene på dem og dykke ned i vigtige koncepter som præcedens og associativitet, så du kan bruge dem korrekt i dine egne projekter.

How do you use assignment operators?
Assignment operators are used to assign values to variables. In the example below, we use the assignment operator (=) to assign the value 10 to a variable called x: The addition assignment operator (+=) adds a value to a variable: A list of all assignment operators:
Indholdsfortegnelse

De Grundlæggende Aritmetiske Operatorer

C understøtter de standard matematiske operationer, som de fleste kender fra skolen. Disse operatorer tager typisk to værdier (operander) og returnerer et enkelt resultat. Lad os se nærmere på de mest almindelige.

Nedenstående tabel giver et hurtigt overblik over de fem grundlæggende aritmetiske operatorer:

OperatorOperationEksempelResultat
+Addition (Lægger sammen)10 + 515
-Subtraktion (Trækker fra)10 - 55
*Multiplikation (Ganger)10 * 550
/Division (Deler)10 / 52
%Modulo (Restværdi ved division)10 % 31

Eksempel med Heltal (Integers)

Når disse operatorer anvendes på heltal (int), er resultatet også et heltal. Dette er især vigtigt at bemærke for divisionsoperatoren (/). Når man dividerer to heltal, vil C afskære decimaldelen og kun returnere heltalsdelen af resultatet. Modulo-operatoren (%) er specifikt designet til heltal og giver resten, der er tilbage, efter en heltalsdivision.

#include <stdio.h> int main() { int a = 10, b = 3; printf("%d + %d = %d\n", a, b, a + b); // Output: 10 + 3 = 13 printf("%d - %d = %d\n", a, b, a - b); // Output: 10 - 3 = 7 printf("%d * %d = %d\n", a, b, a * b); // Output: 10 * 3 = 30 printf("%d / %d = %d\n", a, b, a / b); // Output: 10 / 3 = 3 (decimaldel afskæres) printf("%d %% %d = %d\n", a, b, a % b); // Output: 10 % 3 = 1 (resten af 10/3) return 0; } 

Eksempel med Flydende Kommatal (Floats)

Når du arbejder med flydende kommatal (float eller double), opfører operatorerne sig som forventet, og divisionsoperatoren giver et præcist resultat inklusive decimaler. Det er vigtigt at bemærke, at modulo-operatoren (%) i standard C ikke kan bruges med flydende kommatal; den er forbeholdt heltal.

#include <stdio.h> int main() { float x = 10.0, y = 3.0; printf("%f + %f = %f\n", x, y, x + y); // Output: 10.000000 + 3.000000 = 13.000000 printf("%f - %f = %f\n", x, y, x - y); // Output: 10.000000 - 3.000000 = 7.000000 printf("%f * %f = %f\n", x, y, x * y); // Output: 10.000000 * 3.000000 = 30.000000 printf("%f / %f = %f\n", x, y, x / y); // Output: 10.000000 / 3.000000 = 3.333333 return 0; } 

Inkrement- og Dekrementoperatorer (++ og --)

C tilbyder to meget nyttige unære operatorer (operatorer, der kun arbejder på én operand) til at øge eller mindske en variabels værdi med 1. Disse er inkrementoperatoren (++) og dekrementoperatoren (--).

  • Inkrement (++): Lægger 1 til værdien af en variabel.
  • Dekrement (--): Trækker 1 fra værdien af en variabel.

Disse operatorer er i bund og grund en genvej. For eksempel er x++; det samme som x = x + 1;. De kan dog bruges på to forskellige måder: præfiks og postfiks.

Forskel på Præfiks og Postfiks

Måden, du placerer operatoren på, har betydning for, hvornår værdien opdateres i et udtryk. Dette er en af de mest almindelige kilder til forvirring for nye C-programmører.

  • Præfiks (++variabel): Værdien af variablen øges/mindskes først, og derefter bruges den nye værdi i udtrykket.
  • Postfiks (variabel++): Den oprindelige værdi af variablen bruges først i udtrykket, og derefter øges/mindskes værdien.

Lad os se på et eksempel for at gøre forskellen klar:

#include <stdio.h> int main() { int x, y; // Præfiks-inkrement eksempel x = 5; y = ++x; // Først øges x til 6, derefter tildeles y værdien 6 printf("Præfiks: y = %d, x = %d\n", y, x); // Output: Præfiks: y = 6, x = 6 // Postfiks-inkrement eksempel x = 5; y = x++; // Først tildeles y den oprindelige værdi af x (5), derefter øges x til 6 printf("Postfiks: y = %d, x = %d\n", y, x); // Output: Postfiks: y = 5, x = 6 return 0; } 

Den samme logik gælder for dekrementoperatoren (--). At forstå forskellen mellem præfiks og postfiks er afgørende, især i løkker og komplekse betingede udtryk, hvor denne lille forskel kan ændre programmets logik fuldstændigt.

Operatorpræcedens og Associativitet

Når et udtryk indeholder flere operatorer, hvordan ved C så, hvilken operation der skal udføres først? Svaret ligger i reglerne for præcedens og associativitet.

What arithmetic systems operate on other than numbers?
Some arithmetic systems operate on mathematical objects other than numbers, such as interval arithmetic and matrix arithmetic. Arithmetic operations form the basis of many branches of mathematics, such as algebra, calculus, and statistics. They play a similar role in the sciences, like physics and economics.

Præcedens (Rangorden)

Præcedens definerer operatorernes prioritet. Operatorer med højere præcedens evalueres før operatorer med lavere præcedens. Dette følger de samme regler som i almindelig matematik, hvor multiplikation og division udføres før addition og subtraktion.

For eksempel, i udtrykket 5 + 2 * 3, vil 2 * 3 blive beregnet først (resultat 6), og derefter vil 5 + 6 blive beregnet, hvilket giver det endelige resultat 11. Hvis du ønsker at ændre denne rækkefølge, kan du bruge parenteser (). Parenteser har den højeste præcedens. Udtrykket (5 + 2) * 3 vil først beregne 5 + 2 (resultat 7) og derefter 7 * 3, hvilket giver 21.

Her er en forenklet præcedenstabel for de aritmetiske operatorer:

PræcedensniveauOperatorerBeskrivelse
Højeste++, -- (postfiks)Post-inkrement/-dekrement
Høj++, -- (præfiks)Præ-inkrement/-dekrement
Mellem*, /, %Multiplikation, Division, Modulo
Lav+, -Addition, Subtraktion

Associativitet

Hvad sker der, hvis et udtryk har flere operatorer med samme præcedens, som f.eks. i 100 / 10 * 2? Her kommer associativitet ind i billedet. Associativitet bestemmer retningen, som operatorerne evalueres i: enten fra venstre mod højre eller fra højre mod venstre.

De fleste aritmetiske operatorer i C (*, /, %, +, -) har venstre-mod-højre associativitet. Det betyder, at operationerne udføres fra venstre side af udtrykket. I eksemplet 100 / 10 * 2, vil 100 / 10 blive beregnet først (resultat 10), og derefter vil 10 * 2 blive beregnet, hvilket giver 20.

Ofte Stillede Spørgsmål (FAQ)

Hvilken operator bruges til at lægge en værdi til i C?

Additionsoperatoren + bruges til at addere to værdier. Disse værdier kan være variable, konstanter eller resultatet af andre udtryk. For eksempel total = pris + moms;.

Hvad er den primære forskel mellem `/` for heltal og flydende kommatal?

Når du bruger divisionsoperatoren / med to heltal, udfører C en heltalsdivision, hvilket betyder, at enhver rest eller decimaldel ignoreres. 7 / 2 vil give 3. Hvis mindst én af operanderne er et flydende kommatal (f.eks. 7.0 / 2), vil resultatet være et flydende kommatal med decimaler, altså 3.5.

Kan modulo-operatoren (%) bruges med `float` eller `double`?

Nej, i standard C er modulo-operatoren % kun defineret for heltalstyper (som int, long osv.). Forsøger man at bruge den med flydende kommatal, vil det resultere i en kompileringsfejl.

Hvornår skal jeg bruge præ-inkrement (++x) frem for post-inkrement (x++)?

Hvis inkrementet står alene på en linje (f.eks. x++; eller ++x;), er der ingen funktionel forskel. Du bør bruge præ-inkrement, når du har brug for den opdaterede værdi med det samme i et større udtryk. Du bør bruge post-inkrement, når du har brug for at bruge den nuværende værdi af variablen, før den bliver opdateret.

Hvis du vil læse andre artikler, der ligner Aritmetiske Operatorer i C: En Komplet Guide, kan du besøge kategorien Sundhed.

Go up