C/Operaattorit
Tämä luku kertoo C:n operaattoreista.
Aritmeettiset operaatiot
muokkaaLaskutoimitukset ovat C-kielessä helppoja. Kieli sisältää seuraavat yksinkertaiset aritmeettiset operaattorit.
Operaattori | Kuvaus |
---|---|
+ | yhteenlasku |
- | vähennyslasku |
* | kertolasku |
/ | jakolasku |
% | jakojäännös |
Näillä operaattoreilla pystyt suorittamaan yksinkertaisia laskutoimituksia.
int a, b, c; a = 1 + 1; /* a on nyt 2 */ b = a + 5; /* b on nyt 7 */ c = b - 4; /* c on nyt 3 */ a = c * b; /* a on nyt 21 */
Monimutkaisemmissa laskutoimituksissa voidaan käyttää sulkuja selventämiseksi.
int luku = (6 / 2) * (2 + (32 % 7)); /* luku on nyt 18 */
C-kieli sisältää myös aritmeettisten operaattoreiden lyhyet muodot. Niitä käytetään muuttujien kanssa seuraavasti.
Pitkä muoto | Lyhyt muoto | Kuvaus |
---|---|---|
x = x + 1 | x++ | Korottaa muuttujan arvoa yhdellä |
x = x - 1 | x-- | Pienentää muuttujan arvoa yhdellä |
x = x + 2 | x += 2 | Korottaa muuttujan arvoa kahdella |
x = x - 2 | x -= 2 | Pienentää muuttujan arvoa kahdella |
x = x * 2 | x *= 2 | Kertoo muuttujan arvon kahdella |
x = x / 2 | x /= 2 | Jakaa muuttujan arvon kahdella |
x = x % 2 | x %= 2 | Laskee muuttujan ja luvun 2 jakojäännöksen |
Etuliitteenä + ei muuta numeron arvoa, kun taas - ottaa vastaluvun, esim. -luku.
Operaattoreita ++ ja -- voidaan käyttää joko jälkiliitteenä (i++) tai etuliitteenä (++i). All on esimerkkejä lyhyiden muotojen käytöstä.
int luku = 0; luku += 2; /* luku on nyt 2 */ luku++; /* luku on nyt 3 */ luku *= luku; /* luku on nyt 9 */ --luku; /* luku on nyt 8 */
Jälkiliite- ja etuliitemuodot eroavat toisistaan palautusarvonsa osalta seuraavasti.
int luku = 0; int luku1 = luku++; /* luku on nyt 1, luku1 on nyt 0 */ int luku2 = ++luku; /* luku on nyt 2, luku2 on nyt 2 */
Vertailuoperaatiot
muokkaaKaikkien vertailuoperaattoreiden tulos on 1, jos vertailu pitää paikkansa, ja muuten 0.
Kun vertaillaan osoittimia, operaattorit vertaavat niiden osoitteita, ei niiden sisältöä.
Muoto | Selite |
---|---|
x == y | Onko x yhtä suuri kuin y.
Liukuluvuilla tarkistus pitää lukuja yhtäpitävinä vain, jos ne esittävät aivan täysin samaa lukua (epäluvut tai NaN:t eivät ole koskaan yhtä kuin mikään luku, edes itsensä kanssa). |
x != y | Onko x eri suuri kuin y. Käytännössä x == y:n vastakohta. |
x < y | Onko x pienempi kuin y. |
x <= y | Onko x pienempi tai yhtä suuri kuin y. |
x > y | Onko x suurempi kuin y. |
x >= y | Onko x suurempi tai yhtä suuri kuin y. |
Loogiset operaatiot
muokkaaLoogisia operaattoreita on viisi:
Muoto | Selite |
---|---|
!x | "ei"; totuusarvon vastakohta eli negaatio.
1, jos x on nolla (tai osoittimilla NULL), muuten 0. |
x | y | "tai"; disjunktio.
1, jos x tai y on 1, muuten 0. Oikeasti tämä on bittioperaattori, joten se ei välttämättä toimi oikein loogisena operaattorina, jos x tai y on jotain muuta kuin 0 tai 1. Tarvittaessa voi tehdä !!(x) | !!(y) |
x || y | "tai"; disjunktio, katkaiseva.
Tulos on x, jos se on jotain muuta kuin 0 (tai osoittimilla NULL), muuten y. Toisin kuin muut operaattorit (paitsi &&), lauseketta y ei edes lasketa, mikäli tämä palauttaa x:n. |
x & y | "ja"; konjunktio.
1, jos x ja y on 1, muuten 0. Oikeasti tämä on bittioperaattori, joten se ei välttämättä toimi oikein loogisena operaattorina, jos x tai y on jotain muuta kuin 0 tai 1. Tarvittaessa voi tehdä !!(x) & !!(y) |
x && y | "ja"; konjunktio, katkaiseva.
Tulos on x, jos x on yhtä kuin 0 (tai osoittimilla NULL), muuten y. Toisin kuin muut operaattorit (paitsi ||), lauseketta y ei edes lasketa, mikäli tämä palauttaa x:n. |
Bittioperaatiot
muokkaaNämä operaatiot vaikuttavan luvun bitteihin, jotka ilmenevät luvun binäärimuodosta. Esimerkeissä näytetään luku desimaali- ja binäärimuotoisina, ja lukujen oletetaan olevan 16-bittisiä ja etumerkittömiä (esim. unsigned short lähes kaikilla alustoilla). Kaikki bittikohtaiset operaatiot ovat vaihdannaisia, mutta bittisiirto-operaatiot eivät.
Syntaksi | Selite | Esimerkki | Huomiot |
---|---|---|---|
~x | Bittikohtainen EI (NOT): kääntää kaikki bitit | ~23456:
23456 = 0101101110100000 ~ _________________ = 1010010001011111 = 42079 |
Etumerkittömillä luvuilla sama kuin vähentäminen tietotyypin maksimiarvosta - 1. Jos kahden komplementti käytössä, etumerkillisillä luvuilla ~x == -x - 1. |
x | y | Bittikohtainen TAI (OR): bitti on 1, jos jompikumpi tai kummatkin on 1 | 53578 | 17473:
53578 = 1101000101001010 17473 = 0100010001000001 | _________________ = 1101010101001011 = 54603 |
Hyödyllinen bittimaskeissa |
x & y | Bittikohtainen JA (AND): bitti on 1 vain jos kummatkin on 1 | 38587 & 4607:
38587 = 1001011010111011 4607 = 0001000111111111 & _________________ = 0001000010111011 = 4283 |
Hyödyllinen bittimaskeissa |
x ^ y | Bittikohtainen ehdoton TAI (XOR): bitti on 1 vain jos toinen biteistä on 1 | 54498 ^ 25163:
54498 = 1101010011100010 25163 = 0110001001001011 ^ _________________ = 1011011010101001 = 46761 |
Joissain kielissä ^ on potenssioperaattori, muttei C:ssä |
x << y | Bittisiirto vasemmalle | 37 << 2:
37 = 0000000000100101 << 2 ________________ 0000000000100101<< xx||||||||||||||.. = 0000000010010100 = 148 19438 << 2: 19438 = 0100101111101110 << 2 ________________ 0100101111101110<< xx||||||||||||||.. = 0010111110111000 = 12216 |
Etumerkittömillä luvuilla vastaa kertomista kahden potenssilla, mutta ylivuotobitit jäävät pois. Jos kahden komplementti käytössä, etumerkillisillä luvuilla vastaa myös kertomista kahden potenssilla. |
x >> y | Bittisiirto oikealle | 6000 >> 2:
6000 = 0001011101110000 >> 2 ________________ >>0001011101110000 ..||||||||||||||xx = 0000010111011100 = 1500 59959 >> 3: 59959 = 1110101000110111 >> 3 ________________ >>>1110101000110111 ...|||||||||||||xxx = 0001110101000110 = 7494 |
Etumerkittömillä luvuilla vastaa jakamista kahden potenssilla ja pyöristämistä alaspäin. Etumerkillisillä luvuilla tulos riippuu alustasta (vaikka käytössä olisi kahden komplementti). |
Muut operaatiot
muokkaasizeof palauttaa tietotyypin koon merkkeinä (eli tavuina). Jos sille annetaan muuttuja, palautettu koko on sen tietotyypin koko. Huomaa, että koska sizeof:n yksikkö on merkkejä (char), sizeof(char) on aina 1.
Ternäärioperaattori ehto ? niin : muuten laskee ja palauttaa arvon niin, jos ehto on tosi (muu kuin 0 tai NULL), ja muuten laskee ja palauttaa arvon muuten.
Jos pilkkua käytetään parametri- tai argumenttilistan ulkopuolella, se toimii operaattorina, joka laskee kaikki arvot ja palauttaa niistä viimeisen.
Laskujärjestys
muokkaaKorkeimmat operaattorit lasketaan ensin.
Laskujärjestys | Operaattori | Selitys | Liitännäisyys (suunta) |
---|---|---|---|
1 | (...)++ | Korota arvoa yhdellä | Vasemmalta oikealle |
(...)-- | Laske arvoa yhdellä | ||
(...) | Funktiokutsu | ||
[...] | Indeksi | ||
. | Tietueen kenttä | ||
-> | Tietueen kenttä osoittimen takaa | ||
2 | ++(...) | Korota arvoa yhdellä | Oikealta vasemmalle |
--(...) | Laske arvoa yhdellä | ||
+(...) | Numeerinen arvo ilman muutosta | ||
-(...) | Vastaluku | ||
!(...) | Looginen EI-operaattori | ||
~(...) | Bitti-EI-operaattori | ||
(T)(...) | Tyyppimuunnos | ||
* | Osoittimen seuraaminen | ||
& | Osoitteen ottaminen | ||
sizeof | Koon määritys | ||
3 | * | Kertolasku | Vasemmalta oikealle |
/ | Jakolasku | ||
% | Jakojäännös | ||
4 | + | Yhteenlasku | |
- | Vähennyslasku | ||
5 | << | Bittisiirto vasemmalle | |
>> | Bittisiirto oikealle | ||
6 | < | Pienempi kuin | |
<= | Pienempi tai yhtä suuri kuin | ||
> | Suurempi kuin | ||
>= | Suurempi tai yhtä suuri kuin | ||
7 | == | Yhtä suuri kuin | |
!= | Eri suuri kuin | ||
8 | & | Bitti-/looginen JA-operaattori | |
9 | ^ | Bitti- ehdoton TAI -operaattori | |
10 | | | Bitti-/looginen TAI-operaattori | |
11 | && | Katkaiseva looginen JA-operaattori | |
12 | || | Katkaiseva looginen TAI-operaattori | |
13 | ? : | Ternäärioperaattori | |
14 | = | Sijoitusoperaattori, mukaan lukien kaikki lasku-sijoitusoperaattorit (esim. +=) | Oikealta vasemmalle |
15 | , | Pilkku | Vasemmalta oikealle |
C-ohjelmointikieli |
---|
Yksinkertainen C-kielinen ohjelma — Muuttujat — Operaattorit — Kommentit — Ohjausrakenteet — Funktiot — Osoittimet — Dynaaminen muistinvaraus — Taulukot — Merkkijonot — Tietueet — Esikääntäjä — Otsikkotiedostot C-kielen varatut sanat — Standardikirjasto — Aiheesta muualla |