Na forum 4programmers.net korzystamy z plików cookies. Część z nich jest niezbędna do funkcjonowania
naszego forum, natomiast wykorzystanie pozostałych zależy od Twojej dobrowolnej zgody, którą możesz
wyrazić poniżej. Klikając „Zaakceptuj Wszystkie” zgadzasz się na wykorzystywanie przez nas plików cookies
analitycznych oraz reklamowych, jeżeli nie chcesz udzielić nam swojej zgody kliknij „Tylko niezbędne”.
Możesz także wyrazić swoją zgodę odrębnie dla plików cookies analitycznych lub reklamowych. W tym celu
ustaw odpowiednio pola wyboru i kliknij „Zaakceptuj Zaznaczone”. Więcej informacji o technologii cookie
znajduje się w naszej polityce prywatności.
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).
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.
@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ąć ;-)
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ę.
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:
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ę.
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.
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 :)