přejít na obsah přejít na navigaci

Linux E X P R E S, Programovanie v jazyku C++: Operátory (3)

EDU Trainings IT školení

Programovanie v jazyku C++: Operátory (3)

C++

Pokračujeme tretím a zároveň posledným dielom z cyklu operátory. Okrem dokončenia bitových operátorov na vás v závere čaká ternárny operátor. 


Bitový operátor XOR

Operátor XOR nazývame exkluzívny súčet a je svojou funkcionalitou podobný bitovému/logickému súčtu OR. Narozdiel od OR, ale XOR má nepravdivú hodnotu nielen vtedy, ak oba výroky sú nepravdivé, ale aj vtedy, ak sú oba výroky pravdivé.

Správanie operátora XOR:

0 XOR 0 = 0

0 XOR 1 = 1

1 XOR 0 = 1

1 XOR 1 = 0

V jazyku C++ píšeme XOR symbolom ^.

1. príklad: Otestovanie operátora XOR

#include <iostream>
using namespace std;

int main()
{
    cout << "5 ^ 11 = " <<(5 ^ 11)<< "\n";
    cout << "10 ^ 9 = " <<(10 ^ 9)<< "\n";
    cout << "7 ^ 15 = " <<(7 ^ 15)<< "\n";

    return 0;
}

Výsledok programu:

5 ^ 11 = 14
10 ^ 9 = 3
7 ^ 15 = 8

Bitový operátor NOT

Bitový operátor NOT má funkciu takú, že každý bit prevedie na inú hodnotu. Inak povedané, ak niečo má hodnotu 1, tak NOT zmení na 0 a platí to aj opačne. Bitový NOT je známy aj pod pojmom bitový doplnok.

Správanie operátora NOT:

NOT 1 = 0

NOT 0 = 1

2. príklad: Testujeme správanie operátora NOT

#include <iostream>
using namespace std;

int main()
{
    cout << "~11 = " <<(~11)<< "\n";
    cout << "~9 = " <<(~9)<< "\n";
    cout << "~15 = " <<(~15)<< "\n";

    return 0;
}

Výsledok programu:

~11 = -12
~9 = -10
~15 = -16

Bitové posuny

Z minulého diela už niečo viete o výrokovej logike. Aj o tom, ako vyzerajú čísla v 4-bitovom a 8-bitovom predvedení. Teraz tieto poznatky zúročíme na bitových posunoch.

Čo je bitový posun? Jedná sa o posun bitov na základe počtu zadaných miest buď doprava alebo doľava. V jazyku C++ ma bitový posun doľava tvár << a bitový posun doprava tvar >>.

Ukážka:

Majme príklad, že 3 << 1. Znamená to, že zoberieme číslo v 8-bitovej reprezentácie a posunieme jednotlivé bity doľava o 1 pozíciu. A tú chýbajúcu pozíciu na pravej strane doplníme o jednu 0.

Takže praktická ukážka:

  • 0000 0011 – číslo 3 v 8-bitovej reprezentácii

  • 0000 011 – došlo k posunu doľava o jednú pozíciu.

  • 0000 0110 – doplnenie chýbajúcej 0 sprava tak, aby sa zachovala 8-bitová reprezentácia!

Takže po posunutí čísla 3 doľava nám vyšlo číslo 6.

Skúsme ešte jeden príklad. Napríklad 4 << 2

  • 0000 0100 – číslo 4 v 8-bitovej reprezentácii

  • 0001 00 – bitový posun doľava o 2 pozície

  • 0001 0000 – doplnenie núl sprava.

Predstavte si šialenejšie čísla ako sme mali doteraz so šialenejšími posunmi. Napríklad 255 << 9. No komu by sa v dnešnom svete chcelo počítať a posúvať ručne a samozrejme sa nezmýliť. Máme našťastie vzorec, ktorý vystihuje bitový posun doľava.

Vzorec:

Nech platí bitový posun doľava n << k, kde číslo n predstavuje číslo, ktoré chceme posunúť a číslo k znamená počet miest, o ktoré chceme číslo n posunúť doľava. Potom platí x*2n. To znamená, že

z príkladu 255 << 9 dosadíme do vzorca 255*29 = 130560.

Bitový posun doprava znamená, že posúvame bity doprava a vľavo pridávame 0.

Majme príklad 16 >> 3.

0001 0000číslo 16 v 8-bitovej reprezentácii
   0 0010 – bitový posun o tri pozície
0000 0010 – doplnenie núl.

Výsledok je 2.

Vzorec vyjadrujúci bitový posun doprava je x/2n.

3. príklad: Precvičenie bitového posunu doľava a doprava

#include <iostream>
using namespace std;

int main()
{
    cout << "3 << 1 = " <<(3 << 1)<< "\n";
    cout << "6 << 2 = " <<(6 << 2)<< "\n";
    cout << "11 << 4 = " <<(11 << 4)<< "\n";
    cout << "48 >> 3 = " <<(48 >> 3)<< "\n";
    cout << "123 >> 5 = " <<(123 >> 5)<< "\n";
    cout << "144 >> 7 = " <<(144 >> 7)<< "\n";

    return 0;
}

Výsledok programu:

3 << 1 = 6
6 << 2 = 24
11 << 4 = 176
48 >> 3 = 6
123 >> 5 = 3
144 >> 7 = 1

Ternárny operátor

Ternárny operátor ?: alebo ešte známy ako podmienený operátor, súvisí s podmienkami. Ak sa vám nechce zdĺhavo písať if alebo case podmienky, tak ternárny operátor je pre vás ako stvorený. Má to ale háčik resp. obmedzenie. Ternárny operátor je funkcionalitou konštrukcia if else resp. case default. Nie je možné, aby ste z tejto konštrukcie urobili napr. 3 if podmienky.

Takže, máme napríklad vysledok = ((i < 5) ? ++i : --i;

Môj slovný popis, čo sa deje pri odohravaní tohto kódu: Ak hodnota premennej i je menšia ako 5, tak zvýš hodnotu premennej i o +1, inak (zápor alebo už vám známe else) zníž o -1.

4. príklad: Ukážka na ternárny operátor

#include <iostream>
using namespace std;

int main()
{
    int i = 12;
    int vysledok = (i < 10) ? ++i : --i;

    cout << vysledok;

    return 0;
}

Výsledok programu:

11

Nahoru

Přidat téma diskuse

Nejsou podporovány žádné značky, komentáře jsou jen čistě textové. Více o diskuzích a pravidlech najdete v nápovědě.
Diskuzi můžete sledovat pomocí RSS kanálu rss



 
 

Top články z OpenOffice.cz

Eduard Boldižár

Eduard Boldižár

Som redaktorom stránky astrotech.cz. Mám 25 rokov. Medzi moje záľuby patrí astronómia, sci-fi literatúra a programovanie.


  • Distribuce: ubuntu
  • Grafické prostředí: unity



Public Relations

Domény a nepřeberné množství internetových adres s možností jejich zneužití

dnnsecNepropásněte sérii webinářů zaměřených na aktuální bezpečnostní trendy a jednotnou správu zabezpečení vaše IT – každé pondělí a zdarma.
S doménami přijde do kontaktu naprosto každý uživatel internetu, ačkoliv si to asi neuvědomuje. Už jenom samotné hledání na internetu je spojené s doménami, o nakupování v internetových obchodech ani nemluvě. Věděli jste však, že domény mohou být poměrně jednoduše napadeny?

Pokračování ...


SOPHOS - hacking webinar 2

Public Relations

Vyplatí se investice do SEO agentury?

QNAPObjevili jste zajímavý sortiment zboží, po kterém je na trhu poptávka. Čekala vás dlouhá práce, ale byli jste úspěšní a spustili e-shop. Veškeré zboží má perfektně zpracované fotografie a dokonalý popis. Vše je přehledné, jednoduché na ovládání a s poutavou grafikou. Proč u vás nikdo nenakupuje? Proč navštěvují konkurenční stránky, kde mají vyšší cenu, a dokonce řadu chyb v textu? Nejspíš proto, že vás zákazníci nemají kde najít. Nejste na svém trhu přítomni.

Pokračování ...


Redakční blog

Pavel Fric

Pavel Fric, 21. srpen

Sayonara Player 1.5.1

Přehrávač, jak má být. Poslední dobou vývoj šlape


Pavel Fric

Pavel Fric, 26. leden

MuseScore 3

První aktualizace třetí řady notačního editoru MuseScore


Redakce

Redakce, 21. prosinec

Pište pro LinuxEXPRES

Baví vás Linux? Pište o něm, není to nic těžkého. LinuxEXPRES hledá nové autory.


Všechny blogy »

SOPHOS - hacking webinar 2