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

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).

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.

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ę.

0

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

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:

{$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ę.

1 użytkowników online, w tym zalogowanych: 0, gości: 1