Wielkość typu Integer - zależność od architektury

Wielkość typu Integer - zależność od architektury
P2
  • Rejestracja:ponad 10 lat
  • Ostatnio:prawie 5 lat
  • Lokalizacja:okolice Pińczowa
  • Postów:73
0

Witam, w brałem udział w konkursie i otrzymałem następującą wiadomość (dość prostą):

Na Twoim komputerze być może system Windows jest 64-bitowy i wtedy typ integer przechowuje liczbę 32-bitową (czyli wystarczającą). W (...) mamy system 32-bitowy (...) i wtedy integer jest 16-bitowy, czyli za mały.

I pytanie (dosyć proste) - czy Integer na procesorze 32-bitowym ma 16b?
Bo sęk w tym, iż ja robiłem wszystko na 32-bitowej i mi działało.
Więc jak z tym jest?

Dodam, że kompilowałem na Windowsie (32b) (pod Lazarusem), a komisja na Linuksie (32b).

edytowany 2x, ostatnio: flowCRANE
flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 5 godzin
  • Lokalizacja:Tuchów
  • Postów:12171
2

To nie zależy od komputera, a przede wszystkim od kompilatora i docelowej platformy; Poniżej podaję link do artykułu z dokumentacji - jest w nim wszystko opisane na temat wielkości typu Integer:

Edit: Zawsze możesz skorzystać z typów danych, których rozmiar jest zawsze taki sam; Do dyspozycji są typy UInt* i Int*, gdzie w miejsce * możesz wstawić 8, 16, 32 i 64.


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
edytowany 4x, ostatnio: flowCRANE
flowCRANE
@Patryk27 - czemu usunąłeś? Byłeś pierwszy ;P
Patryk27
@furious programming: zasadniczo Twoja odpowiedź jest bardziej precyzyjna, zatem zamiast edytować swoją (co nie wniosłoby żadnej nowej wartości do wątku), wolałem ją usunąć ;-)
flowCRANE
@pawel24pl - przeczytaj na spokojnie ten artykuł; Procesor w Twoim komputerze nie ma żadnego znaczenia.
P2
  • Rejestracja:ponad 10 lat
  • Ostatnio:prawie 5 lat
  • Lokalizacja:okolice Pińczowa
  • Postów:73
0

Kompilowałem na Intel Pentium M, a komisja na Pentium 4 (oba 32b, x86), więc (co wynika z artykułu) nie powinno być różnic.
Dzięki za odpowiedzi i linki.
A co do rady:
No niestety moje przyzwyczajenia (trochę złe) pochodzą z Delphi 7, gdzie nazewnictwo było trochę uboższe, niż w Lazarusie. Na przyszłość na pewno zapamiętam tę wskazówkę.

flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 5 godzin
  • Lokalizacja:Tuchów
  • Postów:12171
0

Jak masz wątpliwości co do rozmiaru jakiegokolwiek typu danych to wystarczy napisać sobie prostą aplikację konsolową z jedną linijką kodu:

Kopiuj
Write('Size: ', SizeOf(Integer));

I problem z głowy :]

No niestety moje przyzwyczajenia (trochę złe) pochodzą z Delphi 7, gdzie nazewnictwo było trochę uboższe, niż w Lazarusie. Na przyszłość na pewno zapamiętam tę wskazówkę.

W starych środowiskach Delphi też mogłeś korzystać z takich typów danych; Wystarczyło sobie zadeklarować aliasy o przystępniejszych nazwach, czyli tak jak to wygląda w Lazarusie; Jeżeli kod chcesz mieć przenośny z Lazarusa do Delphi7 to możesz zadeklarować aliasy w ten sposób:

Kopiuj
{$IFNDEF FPC}

type
  UInt8  = Byte;
  UInt16 = Word;
  UInt32 = Cardinal;
  
type
  Int8  = ShortInt;
  Int16 = SmallInt;
  Int32 = LongInt;

{$ENDIF}

Ewentualnie dobrać inną dyrektywę, np. sprawdzającą wersję Delphi - jeśli jest mniejsza niż ta, w której wymienione aliasy zostały dodane do RTL, deklaracja ich będzie brana pod uwagę.


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
edytowany 4x, ostatnio: flowCRANE
P2
Niestety, jestem szczególnym przypadkiem - nikt mnie nie uczył programowania, sam wszystko ogarnąłem z Internetu - i początkowo o takich typach nie wiedziałem :) . Stąd te niepraktyczne przyzwyczajenia. Ale jakoś z każdym rokiem radzę sobie coraz lepiej.
flowCRANE
Nie jesteś szczegółnym przypadkiem - mnóstwo ludzi samemu z sieci uczyło się programowania, ja również; Nie mówię o lekcjach w szkole, bo z tych lekcji niczego sensownego się człowiek nie nauczy :)
n0name_l
Nie ma chyba nikogo kogo "ktoś" by nauczył programować...

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.