Operátory přírůstku a úbytku - Increment and decrement operators - Wikipedia
![]() | tento článek potřebuje další citace pro ověření.Září 2014) (Zjistěte, jak a kdy odstranit tuto zprávu šablony) ( |
Přírůstek a operátory dekrementace jsou unární operátory že přidat nebo odčítat jeden, do nebo z jejich operand, resp. Obvykle jsou implementovány v rozkazovací způsob programovací jazyky. C -jako jazyky mají dvě verze (před a po) každého operátora s mírně odlišnou sémantikou.
V jazycích syntakticky odvozených z B (včetně C a jeho různých derivátů) je operátor přírůstku zapsán jako ++
a operátor dekrementace je zapsán jako --
. Několik dalších jazyků používá funkce inc (x) a dec (x).
Operátor přírůstku zvyšuje a operátor úbytku snižuje hodnotu svého operandu o 1. Operand musí mít aritmetický nebo ukazatel datový typ, a musí odkazovat na upravitelné datový objekt. Hodnoty ukazatelů se zvyšují (nebo snižují) o částku, díky které směřují na další (nebo předchozí) prvek sousedící s pamětí.
V jazycích, které podporují obě verze operátorů:
- The před- přírůstek a před-decrement operator inkrement (or decrement) their operand by 1, and the value of the expression is the resulting incremented (or decremented) value.
- The pošta- přírůstek a pošta-decrement operátoři zvyšují (nebo snižují) hodnotu svého operandu o 1, ale hodnota výrazu je hodnota operandu předchozí k operaci přírůstku (nebo úbytku).
V jazycích, kde přírůstek / úbytek není výrazem (např. Jít ), je potřeba pouze jedna verze (v případě Go pouze poštovní operátoři).
Protože operátor přírůstku / zmenšení upravuje svůj operand, může použití takového operandu více než jednou v rámci stejného výrazu způsobit nedefinované výsledky. Například ve výrazech jako je x - ++ x
, není jasné, v jakém pořadí by měly být prováděny operace odčítání a přírůstku. Takové výrazy obecně vyvolávají nedefinované chování a je třeba se mu vyhnout.
Příklady
Následující fragment kódu C ilustruje rozdíl mezi před a pošta operátory přírůstku a úbytku:
int X;int y;// Operátory přírůstku// Předběžný přírůstek: x se zvýší o 1, potom se y přidělí hodnota xX = 1;y = ++X; // x je nyní 2, y je také 2// Přírůstek: y je přiřazena hodnota x, poté je x zvýšeno o 1X = 1;y = X++; // y je 1, x je nyní 2// Dekrementační operátory// Předběžné snížení: x se sníží o 1, potom se y přiřadí hodnota xX = 1;y = --X; // x je nyní 0, y je také 0// Post-decrement: y je přiřazena hodnota x, poté je x sníženo o 1X = 1;y = X--; // y je 1, x je nyní 0
V jazycích bez těchto operátorů vyžadují ekvivalentní výsledky další řádek kódu:
# Předběžný přírůstek: y = ++ xX = 1X = X + 1 # x je nyní 2 (v Pythonu lze zapsat jako „x + = 1“)y = X # y je také 2# Přírůstek po: y = x ++X = 1y = X # y je 1X = X + 1 # x je nyní 2
Operátor následného přírůstku se běžně používá s pole dolní indexy. Například:
// Součet prvků poleplovák sum_elements(plovák přílet[], int n){ plovák součet = 0.0; int i = 0; zatímco (i < n) součet += přílet[i++]; // Přírůstek i, který postupuje // prostřednictvím n prvků pole vrátit se součet;}
Operátor následného přírůstku se také běžně používá s ukazatele:
// Zkopírujte jedno pole do druhéhoprázdnota copy_array(plovák *src, plovák *dst, int n){ zatímco (n-- > 0) // Smyčka, která odpočítává od n do nuly *dst++ = *src++; // Zkopíruje prvek * (src) do * (dst), // poté zvýší oba ukazatele}
Všimněte si, že tyto příklady fungují také v jiných jazycích podobných C, například C ++, Jáva, a C#.
- Operátor přírůstku lze demonstrovat na příkladu:
#zahrnout <stdio.h>int hlavní(){ int C=2, d=2; printf("% d n", C++); // tento příkaz zobrazí 2, poté se c zvýší o 1 až 3. printf("% d", ++C); // tento příkaz zvýší c o 1, poté se zobrazí c. vrátit se 0;}
- Výstup:
24
- Výstup:
Podpůrné jazyky
Následující seznam, i když není úplný nebo úplný, uvádí některé z hlavních programovacích jazyků, které podporují ++
/--
operátory zvýšení / snížení.
|
|
|
(Apple Rychlý jednou podporoval tyto operátory,[10] ale podpora byla odstraněna od verze 3.)
Pascal, Delphi, Modula-2, a Oberon poskytují stejné funkce, ale nazývají se inc (x) a dec (x).
Zejména Krajta a Rez nepodporuje tyto operátory.
Dějiny
Koncept byl představen v B programovací jazyk kolem roku 1969 Ken Thompson.[11]
Thompson šel o krok dále tím, že vymyslel operátory ++ a -, které se zvyšují nebo snižují; jejich předpona nebo postfixová poloha určuje, zda ke změně dojde před nebo po zaznamenání hodnoty operandu. Nebyli v nejranějších verzích B, ale objevili se po cestě. Lidé často hádají, že byly vytvořeny pro použití režimů adres s automatickým přírůstkem a automatickým snižováním, které poskytuje DEC PDP-11, ve kterém se C a Unix poprvé staly populární. To je historicky nemožné, protože při vývoji B nebyl žádný PDP-11. PDP-7 však měl několik paměťových buněk s „automatickým přírůstkem“, s vlastností, že nepřímý odkaz na paměť skrze ně buňku zvyšoval. Tato funkce pravděpodobně navrhla takové operátory Thompsonovi; zobecnění, aby byly jak prefixem, tak postfixem, bylo jeho vlastní. Buňky s automatickým přírůstkem nebyly skutečně použity přímo při implementaci operátorů a silnější motivací pro inovaci bylo pravděpodobně jeho pozorování, že překlad ++ x byl menší než překlad x = x + 1.
Viz také
- Rozšířené přiřazení - pro
+=
a-=
operátory - PDP-7
- PDP-11
- Nástupnická funkce
Reference
- ^ „Uživatelská příručka GNU Awk“. Free Software Foundation.
- ^ „8.3. Konstrukce dvojitých závorek“. Dokumentační projekt Linuxu.
- ^ Ritchie, Brian W. Kernighan; Dennis M .; Ritchie, Dennis (1988). Programovací jazyk C. (2. vyd., [Nachdr.] Ed.). Englewood Cliffs, N.J .: Prentice Hall. p.18. ISBN 0-13-110362-8.
- ^ "Operátory přírůstku / snížení". cppreference.com.
- ^ „++ Operator (C # Reference)“. Microsoft Developer Network.
- ^ „Přetížení operátora“. dlang.org.
- ^ „Provozovatelé GP a jejich priority“.
- ^ „O operátorech přiřazení“.
- ^ „Zvýšit jazykový symbol Wolfram“. Centrum jazykové dokumentace Wolfram.
- ^ „Základní operátoři“. developer.apple.com.
- ^ Ritchie, Dennis M. (Březen 1993). „Vývoj jazyka C“. Oznámení ACM SIGPLAN. 28 (3): 5. doi:10.1145/155360.155580.CS1 maint: ref = harv (odkaz)