Literał liczbowy


Literał liczbowy w encyklopedii

Z Wikipedii, wolnej encyklopedii Przejdź do nawigacji Przejdź do wyszukiwania

Literał liczbowy to literał reprezentujący konkretną wartość liczbową wpisaną bezpośrednio w kod źródłowy tworzonej aplikacji.

Literał liczbowy jest też często w literaturze przedmiotu nazywany stałą liczbową lub po prostu liczbą. Jak z powyższej definicji wynika, ten rodzaj jednostek leksykalnych służy do wprowadzania do kodu źródłowego konkretnych wartości liczbowych znanych na etapie tworzenia programu.

Spis treści

Podział | edytuj kod

Ze względu na sposób zapisu wartości liczbowej, wyróżnia się literały liczbowe:

Ponadto w zależności od podstawy systemu liczbowego, literał może być liczbą:

Reprezentacja znakowa liczb dziesiętnych | edytuj kod

Literały liczbowe, jak każda jednostka leksykalna, reprezentowana jest przez wybrany zestaw znaków:

  • Dla literałów dziesiętnych całkowitoliczbowych są to znaki cyfr arabskich: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Oprócz cyfr, w niektórych językach programowania częścią takiego literału jest znak określający, czy liczba jest dodatnia „+”, czy ujemna „-”, np. 50, -123, 0.
 <integer> ::= ['-' | '+'] <digit> {<digit>} <digit> ::= '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' 
  • W przypadku liczb stałopozycyjnych (nazywanych także analogicznie do terminologii matematycznejdziesiętnymi), zestaw powyższych znaków, z których może być zbudowany literał dziesiętny całkowitoliczbowy, rozszerzony jest o znak kropki „.” oddzielający część całkowitą od części ułamkowej. W nowszych systemach programowania znakiem rozdzielającym może być inny znak, np. przecinek „,”, w zależności od ustawień narodowych, np. 1.2; -17.0001; +.4; 12,12.
 <fixed> ::= [<integer>] <dot> [<digit> {<digit>}] <dot> ::= '.' | ',' 
  • W literałach zmiennopozycyjnych (nazywanych także analogicznie do terminologii matematycznejwykładniczymi, naukowymi, inżynierskimi) występuje dodatkowo znak rozdzielający mantysę od cechy. Najczęściej stosuje się w tym celu literę „e” lub „E”. Mantysa najczęściej musi spełniać warunki literału stałopozycyjnego lub całkowitoliczbowego, a cecha (wykładnik) literału całkowitoliczbowego.
 <float> ::= <fixed> <symbol_e> <integer> <symbol_e> ::= 'E' | 'e' | 'd' | 'D' 

Powyższe zasady są uogólnieniem spotykanym w większości języków programowania, tylko w nielicznych implementacjach mogą występować pewne, inne rozwiązania.

W większości języków programowania istnieje podział na liczby całkowite i rzeczywiste. Zapis stałopozycyjny liczb jest więc tylko rodzajem zapisu, uproszczonym w stosunku do zapisu zmiennopozycyjnego, lecz reprezentacja w pamięci tej samej liczby w obu zapisach, np. -10.1 i -1.01E1, będzie identyczna. Są jednak języki w których ta reprezentacja jest inna, odrębna. Tak jest np. w języku PL/I, gdzie istnieje typ FIXED (stałopozycyjny) i FLOAT (zmiennopozycyjny), o różnej reprezentacji liczb w pamięci komputera. Tylko odpowiedni (niezwykle rozbudowany w tym konkretnym języku) aparat konwersji (rzutowania) pozwana na prowadzenie obliczeń z użyciem obu typów liczb równocześnie.

Reprezentacja znakowa w innych systemach | edytuj kod

Zestaw znaków, z których budowane są literały reprezentujące wartość liczbową zapisaną w systemie o innej podstawie niż dziesiętna, zwykle rozszerzony jest o:

  • znaki reprezentujące cyfry w wartościach większych niż 9, a więc 10, 11 … itd..
  • znaki umożliwiające rozróżnienie podstawy systemu liczbowego

Cyfry reprezentujące wartości 10 i większą, zapisywane są za pomocą liter: A lub a=10, B lub b=11, … itd.

Do identyfikacji podstawy systemu liczbowego stosuje się specjalne znaki nie będące cyframi, lub odpowiedni zapis liczby, np.

  • język Pascal:
    • dziesiętne, np. 72, -15, 0
    • szesnastkowe, liczba poprzedzona znakiem $, np. $15, $AB, -$1C, $00
  • język C:
    • dziesiętne, np. 72, -15, 0
    • ósemkowe, liczba poprzedzona znakiem zera wiodącego, np. 015, -0625
    • szesnastkowe, liczba poprzedzona znakami zero i x, tzn. 0x lub 0X, np. 0x15, 0XAB, -0X1c
  • język PL/I:
    • dziesiętne, np. 72, -15, 0
    • dwójkowe, zakończone literą B, np. 0011101B, -1111B
  • język PL/M:
    • dziesiętne, np. 72, -15, 0
    • dwójkowe, zakończone literą B, np. 0011101B, -1111B
    • ósemkowe, zakończone literą Q lub O, np. 15Q, -0625O
    • szesnastkowe, zakończone literą H, np. 15H, 0ABH, -0FFH

Jak z powyższych przykładów wynika, w różnych językach oznacznik podstawy systemu może być umieszczony:

  • na początku literału, przed znakami reprezentującymi wartość liczby
  • na końcu literału, po znakach reprezentujących wartość liczby.

Oba rozwiązana kreują pewne trudności interpretacyjne kodu źródłowego:

  • gdy oznacznik jest na początku literału i jest literą, nie ma możliwości odróżnienia liczby od identyfikatora, w tym przypadku niezbędne jest stosowanie nieznaczącego zera wiodącego, które informuje translator, że dana jednostka leksykalna jest literałem liczbowym, np. w języku C: 0x5, gdyby pominąć zero, napis zostałby potraktowany jak identyfikator x5; nie ma tego problemu, gdy stosuje się inny znak niż literę, np. w języku Pascal: $FF,
  • gdy oznacznik stoi na końcu literału, dla liczb w systemie o podstawie większej niż 10, jeżeli pierwsza cyfra ma wartość większą niż 9 (co oznacza, że jest reprezentowana przez literę), również nie ma możliwości odróżnieni tej liczby od identyfikatora, co rozwiązuje się także przez stosowanie zera wiodącego, np. PL/M: 0FFH.

Inne oznaczniki | edytuj kod

W wielu językach istnieją dodatkowe elementy literału liczbowego pozwalające na określoną jego interpretację.

Przykładowe oznaczniki:

  • w języku C może istnieć oznacznik wielkości liczby, np. litera L identyfikuje, że dana liczba jest liczbą długą (long), np. 5L,
  • w języki PL/I litera I na końcu literału, identyfikuje, że jest to część urojona liczby zespolonej, np. 12+24.6I,
  • w języku Icon oznacznik r oddziela podstawę zastosowanego systemu liczbowego od właściwej wartości liczby, np. 32ramn.

Formatowanie zapisu liczb | edytuj kod

W wielu zastosowaniach często stosuje się specjalne formatowanie zapisu liczb, szczególnie liczb dużych, składających się z wielu znaków, w celu ułatwienia odczytu takiej liczby i zmniejszenia prawdopodobieństwa błędu takiego odczytu przez człowieka. Typowym przykładem takiego formatowania jest grupowanie cyfr, np. po trzy i separowanie ich specjalnym znakiem, np. spacją, kropką, przecinkiem. Składnia większości języków nie dopuszcza takiego specjalnego formatowania, a rolę tę przejęły współcześnie zaawansowane edytory kodu źródłowego. Jednak w pewnych językach, głównie we wczesnych ich wersjach, gdy ograniczenia systemów uniemożliwiały formatowanie na poziomie edytorów, dopuszczono zapis literałów liczbowych sformatowanych, w zakresie grupowania cyfr.

Literały liczbowe w językach programowania | edytuj kod

Literały liczbowe dziesiętne | edytuj kod

Literały liczbowe o innej podstawie | edytuj kod

Zobacz też | edytuj kod

Bibliografia | edytuj kod

Zobacz także | edytuj kod

Na podstawie artykułu: "Literał liczbowy" pochodzącego z Wikipedii
OryginałEdytujHistoria i autorzy