Aritmeettiset operaattorit
Perusoperaattorit
Suurin osa kaikista matemaattisista toiminnoista on ohjelmakirjastoissa. C-kieleen kuuluvat kuitenkin aritmeettiset perusoperaattorit, jotka ovat seuraavat:
- vähennyslasku esim.
merkki | operaatio | esimerkki |
---|---|---|
| vähennyslasku |
|
...
| ||
| yhteenlasku |
|
...
| ||
| kertolasku |
|
| jakolasku |
|
| jakolaskun jakojäännös |
|
Unaarioperaattorit
merkki | operaatio | esimerkki |
---|---|---|
| vähennyslasku ja sijoitus |
|
| lisäyslasku ja sijoitus |
|
| tulo ja sijoitus |
|
| osamäärä ja sijoitus |
|
| modulo ja sijoitus |
|
| dekrementointi eli vähennys yhdellä |
|
...
| inkrementointi eli lisäys yhdellä |
|
- Inkrementointi- ja
...
- dekrementointimerkit voidaan laittaa muuttujan eteen tai sen jälkeen.
- Jos lisäys on for
...
- tai while-silmukan sisällä, tehdään ennen olevilla merkeillä testaus ennen silmukkaa
...
- ja jälkeen olevilla merkeillä silmukan suorituksen jälkeen.
...
Esimerkki unaarioperaattorien käytöstä
Seuraava sijoituslause
Code Block |
---|
Luku = Luku+5;
|
voidaan kirjoittaa muotoon:
Code Block |
---|
Luku += 5;
|
Operaatioiden sijoitus
Matemaattisia operaatioita voidaan sijoittaa kaikkiin paikkoihin mihin muuttujiakin.
Sijoituslauseessa
Code Block |
---|
int x, luku1, luku2; // Esitellään muuttujat x, luku1 ja luku2
x = luku1 * luku2; // Sijoitetaan luku1 kertaa luku2 tulos muuttujaan x
|
Funktion parametrilistassa
Code Block |
---|
int luku1, luku2;
printf("%d + %d = %d\n", luku1, luku2, luku1+luku2);
|
Muuttujien alkuarvona
Code Block |
---|
int a = 3;
int b = 5;
int c = a*b; // Sijoitetaan tulon a * b tulos muuttujan c arvoksi
|
Matemaattiset apufunktiot
Suuri osa kaikista matemaattisista toiminnoista on ohjelmakirjastoissa, kuten esimerkiksi:
toiminto | funktio | esimerkki |
---|---|---|
neliöjuuri | sqrt() |
|
potenssi | pow() |
|
sini | sin() |
|
kosini | cos() |
|
tangentti | tan() |
|
jne | kts math.h |
Nämä löytyvät headerista math.h.
Luku+=5; vastaa samaa kuin Luku=Luku+5;
Bittien käsittely
Yksi tärkeimmistä C-kielen ominaisuuksista on kyky käsitellä tavussa tai sanassa olevia bittejä yksitellen. C-kielen on suunniteltu ottavan assembly-kielen paikan useimmissa yhteyksissä ja siksi sillä on kyettävä tekemään myös hyvin koneläheistä ohjelmaa. Bitti-operaattoreilla testataan, asetetaan, siirretään bittejä tavuissa tai sanoissa, jotka ovat joko char- tai int-tyyppiä tai niiden variantteja:
- & ja
- | tai
- ^ ehdoton tai
- >> siirto oikealle
- << siirto vasemmalle
Bittioperaatiot kahdeksanbittisellä etumerkittömällä luvulla
TRUE true on muu kuin nolla, FALSE false on nolla
Ja, And = & , Tai, Or = | , Xor = ^ , Negaatio = ~ , Shifting left, Siirto vasemmalle = << , Shifting right, Siirto oikealle = >>
JA, AND, operaattori = & , esimerkkejä 8 bittisilla luvuilla, b luvun perässä tarkoittaa sanaa binaari
1. esimerkki, a = 255 & 15 = 1111 1111b & 0000 1111b = 0000 1111b = 15 = 0xE = 017
2. esimerkki a = 255 & 1 = 1111 1111b & 0000 0001b = 0000 0001b = 1 = 0x1 = 01
3. esimerkki a = 2 & 1 = 0000 0010b & 0000 0001b = 0000 0000b = 0 = 0x1 = 00
4. esimerkki a = 3 & 1 = 0000 0011b & 0000 0001b = 0000 0001b = 1
5. esimerkki a = 3 & 2 = 0000 0011b & 0000 0010b = 0000 0010b = 2
TAI , OR, operaattori |
1. esimerkki, a = 0 | 1 = 0000 0000b | 0000 0001b = 0000 0001b = 1
2. esimerkki, a = 2 | 1 = 0000 0010b | 0000 0001b = 0000 0011b = 3
3. esimerkki, a = 4 | 8 = 0000 0100b | 0000 1000b = 0000 1100b = 12 =0 xC = 014
4. esimerkki, a = 4 | 12 = 0000 0100b | 0000 1100b = 0000 1100b = 12
Ehdoton TAI , XOR, operaattori ^
1. esimerkki, a = 0 ^ 1 = 0000 0000b ^ 0000 0001b = 0000 0001b = 1
2. esimerkki, a = 1 ^ 1 = 0000 0001b ^ 0000 0001b = 0000 0000b = 0
3. esimerkki, a = 2 ^ 1 = 0000 0010b ^ 0000 0001b = 0000 0011b = 3
4. esimerkki, a = 3^ 1 = 0000 0011b ^ 0000 0001b = 0000 0000b = 2
5. esimerkki, a = 4 ^ 8 = 0000 0100b ^ 0000 1000b = 0000 1100b = 12 =0 xC = 014
6. esimerkki, a = 4 ^ 12 = 0000 0100b ^ 0000 1100b = 0000 1000b = 8
Negaatio, operaattori ~, Negaatio-operaattori kääntää kaikki muuttujan bitit päinvastaiseksi
1.esimerkki, a = 0 = 0000 0000; operaatio a = ~a; nyt a= 1111 1111; lopputulos a = 255 = 0xFF
2.esimerkki a = 1 = 0000 0001; operaatio a =~a; nyt a= 1111 1110; lopputulos a = 254 = 0xFE
3.esimerkki a = 12= 0000 1100; operaatio a = ~a; nyt a= 1111 0011; lopputulos a = 243 = 0xF3
4.esimerkki a = 15= 0000 1111; operaatio a = ~a; nyt a= 1111 0000; lopputulos a = 240 = 0xF0
Siirto vasemmalle Shifting left, operaattori <<
1. esimerkki a=1= 0000 0001, operaatio a = a<<1 ; nyt a= 0000 0010 ; lopputulos a = 2
2. esimerkki a=128= 1000 0000, operaatio a = a<<1 ; nyt a= 0000 0000 ; lopputulos a = 0
3. esimerkki a=0 = 0000 0000, operaatio a = a<<1 ; nyt a= 0000 0000 ; lopputulos a = 0
Siirto oikealle, Shifting right, operaattori >>
1. esimerkki a=1= 0000 0001, operaatio a = a>>1 ; nyt a= 0000 0000 ; lopputulos a = 0
2. esimerkki a=128= 1000 0000, operaatio a = a>>1 ; nyt a= 0100 0000 ; lopputulos a = 64=0x70
3. esimerkki a=0 = 0000 0000, operaatio a = a>>1 ; nyt a= 0000 0000 ; lopputulos a = 0