Just nu i M3-nätverket
Gå till innehåll

Deklaration


GronK

Rekommendera Poster

int testA;

unsigned int testB;

Utan att veta exakt i C men en ren chansning från andra språk är att unsigned innebär att variabeln deklareras för positiva värden motsatt en variabel som inte är deklarerad som unsigned som kan ha ett positivt såväl som ett negativt värde.

 

 

.dune.

----------------------------------------------

- "I find this a nice feature but it is not according to the documentation. Or is it a BUG?"

- "Let´s call it an accidental feature. :-)"

 

Länk till kommentar
Dela på andra webbplatser

...av vilket hela vitsen är att kunna lagra ~dubbelt så stora (positiva) tal om du deklarerar den som unsigned - eftersom du kan använda alla negativa värden också fast för att räkna positivt :)

 

*förvirring*

 

En 8-bitars int räknar från -127 till +128 eller nå't i den stilen - medans en 8-bitars unsigned int räknar från 0 till +255 eller nå't i den stilen - har jag allt för mig :)

 

-- -

.Wey - Go da! Sing a song!

-- -

 

Länk till kommentar
Dela på andra webbplatser

jerker olofsson

alla built-in types kommer i 3 smaker.

 

plain, signed och unsigned.

 

En signed type är alltid lika stor som en unsigned type som är lika stor som en plain type. Detta är minnesmässigt, dock kan du lagra olika värden i signed och unsigned.

 

I signed typer används en bit i variablen till att tala om att det är ett positivt eller negativt värde. En 8 bitars integer kan hålla ett tal mellan 0 och 255. Detta är om det är unsigned, dvs inte har en bit reserverad till +/-. Om man tar bort en bit för det kan den lagra tal mellan 0 och 127. Sen kan du ju växla mellan + och -, då kan den lagra mellan -127 och 127.

 

t ex

char, signed char, unsigned char.

wchar_t, signed wchar_t, och unsigned wchar_t.

short, signed short, och unsigned short.

long, signed long, och unsigned long.

int, signed int, och unsigned int.

 

Reglerna är följande:

 

char

En signed char skall minst kunna lagra -127 - 127.

En unsigned char skall minst kunna lagra 0 - 255.

En char lagrar det som passar bäst för att innehålla ett tecken på den plattformen du kompilerar programmet på. en char kan vara unsigned eller signed, det är upp till implementationen av C++.

 

En char är alltid 1 stor (med sizeof)

 

En wchar_t är alltid minst lika stor som en char, men kan vara större. En long är alltid minst lika stor som en wchar_t, men kan vara större.

 

integers

För short, long, och int är de alltid signed om de inte specifieras som unsigned.

 

En short är alltid minst lika stor som en char, men kan vara större.

 

En int är alltid minst lika stor som en short, men kan vara större.

 

En long är alltid minst lika stor som en int, men kan vara större.

 

Int är den storleken som passar processorarkitekturen bäst.

 

Så om du inte programmerar för en viss plattform, kan du aldrig vara säker på hur mycket dina variabler kan lagra, bortsätt från reglerna ovan.

 

Typiska implementationer av typerna är följande:

signed char = -127 - 127.

unsigned char = 0 - 255

signed short = -32767 - 32767

unsigned short = 0 - 65535

signed int = -2147483647 - 2147483647

unsigned int = 0 - 4294967295

 

signed long long = -9223372036854775807 - 9223372036854775807

unsigned long long = 0 - 18446744073709551615

 

long long är ofta en 64-bitars typ. __int64 i windows.

 

Hoppas jag fick allting rätt nu.

 

Länk till kommentar
Dela på andra webbplatser

Typiska implementationer av typerna är följande:

Nästan rätt, typiska implementationer av signed går ett steg längre ner på den negativa sidan (-128 -> 127 osv) eftersom 0 saknar den höga biten (och därmed räknas till den positiva delen av talen).

 

 

Länk till kommentar
Dela på andra webbplatser

Man kanske inte skall posta helt nyvaken :-)

Det där har jag också försökt komma ihåg :-)

 

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...