Leírás
Az Uno és a többi ATMEGA processzorral gyártott alaplapokon az előjel nélküli egészek tárolása megegyezik az előjelesekkel abban, hogy 2 bájtot foglalnak a memóriából. A negatív számok tárolása helyett azonban csak a pozitív értékeket tárolják, 0-65535 tartományban.
A Due 4 bájton tárolja (32 bit), 0-tól 4 294 967 295-ig.
Az előjel nélküli és az előjeles számok közötti különbség abban rejlik ahogy az első bitet értelmezik, amelyet néha "jel" bitnek is nevezünk. Az Arduino int típusban (amely előjeles), ha az első bit "1", akkor a számot negatív számnak kell tekinteni, a másik 15 bitet pedig kettes komplemensként értelmezzük.
Szintaxis
unsigned int var = val;
paraméterek
var: változó neve.
val: az az érték, amelyet hozzárendelsz ehhez a változóhoz.
Példakód
unsigned int ledPin = 13;
Megjegyzések és figyelmeztetések
Ha az előjel nélküli változó meghaladja maximális értékét (túlcsordul), akkor "visszafordul" 0-ra, és fordítva:
Az előjel nélküli változókkal végzett műveletek váratlan eredményeket hozhatnak, még akkor is, ha nincs túlcsordulás. A mikrovezérlő a következő szabály alapján dolgozik:
- A számítást az eredményül szolgáló változó adattípusa szerint végzi el. Például: ha az eredményt előjeles változóban tároljuk, akkor a matematikai művelet az alapján lesz végrehajtva, még akkor is, ha a bemenő adattípusok előjel nélküliek.
- Egy közbenső eredményt igénylő számítás esetén a közbenső eredmény előjel, vagy előjel nélküliségét a kód nem határozza meg. Ebben az esetben a mikrovezérlő előjel nélküli számként tekinti, mert mindkét operátora előjel nélküli!
Miért érdemes egyáltalán előjel nélküli változókat használni?
- Ha a túlcsordulás hasznos, pl. számlálók
- Ha az előjeles változó maximális méretébe csak éppen, hogy nem férünk bele és ezért nem szeretnénk több memóriát foglaló adattípust használni
Lásd még
String()
array
bool
boolean
byte
char
double
float
int
long
short
size_t
string
unsigned char
unsigned long
void
word