[Data Types] → unsigned int

Popis :

Na Uno a iných doskách založených na ATMEGA sú ints bez znamienka (celé čísla bez znamienka) rovnaké ako ints v tom, že ukladajú 2 bajtovú hodnotu. Namiesto ukladania záporných čísel však ukladajú iba kladné hodnoty, čím sa získa užitočný rozsah od 0 do 65 535 ((2^16) – 1). Due ukladá 4 bajtovú (32-bitovú) hodnotu v rozsahu od 0 do 4 294 967 295 (2^32 – 1).

Rozdiel medzi unsigned ints a (signed) ints spočíva v spôsobe, akým sa interpretuje najvyšší bit, niekedy označovaný ako “signed” bit. V type Arduino int, ak je vysoký bit „1“, číslo sa interpretuje ako záporné číslo a ďalších 15 bitov sa interpretuje s (doplnkom 2).

Syntax :

unsigned int var = val;

Parametre :

var: názov premennej.

val: hodnota, ktorú priradíte tejto premennej.

Príklad kódu :

unsigned int ledPin = 13;

Keď premenné bez znamienka prekročia svoju maximálnu kapacitu, vrátia sa späť na 0 a tiež naopak:

unsigned int x;
x = 0;
x = x - 1;  //x teraz obsahuje 65535 - prevráti sa v zápornom smere
x = x + 1;  //x teraz obsahuje 0 - prevráti sa

Matematika s unsigned variables môže priniesť neočakávané výsledky, aj keď sa vaša unsigned premenná nikdy neprevráti.

Výpočet sa vykonáva v rozsahu premennej destinácie. napr. ak je cieľová premenná so znamienkom, vykoná výpočet so znamienkom, aj keď sú obe vstupné premenné bez znamienka. Avšak pri výpočte, ktorý vyžaduje medzivýsledok, nie je rozsah medzivýsledku špecifikovaný kódom. V tomto prípade MCU vykoná výpočet bez znamienka pre medzivýsledok, pretože oba vstupy sú bez znamienka!

unsigned int x = 5;
unsigned int y = 10;
int result;

result = x - y; // 5 - 10 = -5, podľa očakávania
result = (x - y) / 2; // 5 - 10 bez znamienka 65530!  65530/2 = 32765

//  použiť signed (variables) premenné alebo vykonať výpočet krok za krokom.
result = x - y; // 5 - 10 = -5, podľa očakávania
result = result / 2;  //  -5/2 = -2 (iba celočíselná matematika, desatinné miesta sa vypustia)

Prečo vôbec používať premenné bez znamienka? :

  • Chovanie pri prevrátení je žiaduce, napr. počítadlá
  • signed variable je príliš malá, ale chcete sa vyhnúť strate pamäte a rýchlosti funkcie long/float.

Pridaj komentár

Vaša e-mailová adresa nebude zverejnená. Vyžadované polia sú označené *

Nemôžete kopírovať obsah tejto stránky