3.1. Liczby całkowite
Typem danych reprezentującym liczby całkowite ze znakiem, o zakresie umożliwiającym reprezentację ich za pomocą czterech bajtów, jest Int. Literały reprezentujące liczby całkowite posiadają domyślnie ten właśnie typ.
scala> val a = 41 a: Int = 41 scala> val b = 4813 b: Int = 4813 scala> val c = 177903 c: Int = 177903
Liczby całkowite można zapisywać w notacji szesnastkowej, rozpoczynając je od znaków 0x albo 0X.
scala> val b2 = 0x12CD b2: Int = 4813 scala> val c2 = 0X2b6ef c2: Int = 177903
Liczby całkowite ze znakiem o zakresach danych mniejszych od zakresu wartości typu Int mogą być reprezentowane przez typy Byte i Short. Typ Byte reprezentuje liczby o zakresie mieszczącym się w jednym bajcie, a typ Short — o zakresie mieszczącym się w dwóch bajtach. Z kolei typ Char reprezentuje liczby całkowite nieujemne, które można zapisać na dwóch bajtach. Wartości typu Int mieszczące się w odpowiednich zakresach mogą być przekształcone przez Scalę na wartości typów Byte, Short lub Char.
![]() | Możliwość dokonywania konwersji wartości typu Int na wartości typów Byte, Short lub Char jest w specyfikacji opisana jako „Numeric Literal Narrowing” w punkcie 6.26.1. |
scala> val a3: Byte = 41 a3: Byte = 41
scala> val b3: Short = 0x12CD b3: Short = 4813 scala> val d: Char = 123d: Char = {
Typ Char reprezentuje jednocześnie znaki. W wyrażeniu z wiersza
konsola pokazała wartość 123, przypisaną wartości d typu Char,
jako znak {. W kodzie Unicode znak o kodzie 123 to właśnie znak
{. Wartościom typu Char można przypisać nie tylko liczby, ale
również literały znakowe. Literały znakowe są ograniczone znakami
apostrofu. Mogą zawierać zwykłe znaki, sekwencje ucieczki oraz
sekwencje Unicode w postaci znaków \u i czterech kolejnych cyfr
szesnastkowych.
Sekwencje ucieczki pozwalają za pomocą dwóch znaków zakodować pojedynczy znak. Składają się ze znaku \, po którym następuje inny znak. Poniższa lista przedstawia sekwencje ucieczki, które mogą być użyte w literałach znakowych:
- \b — znak o kodzie 8, czyli znak cofnięcia kursora o jedną pozycję,
- \t — znak o kodzie 9, czyli znak tabulacji poziomej,
- \n — znak o kodzie 10, czyli znak przejścia do nowego wiersza,
- \f — znak o kodzie 12, czyli znak przejścia do nowej strony,
- \r — znak o kodzie 13, czyli znak powrotu karetki,
- \" — znak o kodzie 34, czyli znak " (cudzysłów),
- \' — znak o kodzie 39, czyli znak ' (apostrof),
- \\ — znak o kodzie 92, czyli znak \ (odwrotny ukośnik).
Poniższe wyrażenia tworzą tę samą wartość znakową — dużą literę K.
scala> val e1: Char = 'K' e1: Char = K scala> val e2: Char = 75 e2: Char = K scala> val e3: Char = 0x4B e3: Char = K scala> val e4: Char = '\u004b' e4: Char = K
![]() | Specyfikacja języka Scala opisuje literały znakowe w punkcie 1.3.4, a notację znaków ucieczki w punkcie 1.3.6. |
Liczby całkowite o zakresie większym od zakresu wartości typu Int mogą być reprezentowane przez typ Long, przechowujący wartości na ośmiu bajtach. Literały tego typu są zakończone literami l lub L. Mogą one być również zapisywane w notacji szesnastkowej.
scala> val f: Long = 5396967291l f: Long = 5396967291 scala> val g: Long = 0xFA34de672L g: Long = 67164300914
Poniższe wyrażenia ilustrują wybrane operacje, które można dokonywać na liczbach całkowitych. Są to kolejno: dodawanie, odejmowanie, mnożenie, dzielenie, obliczanie reszty z dzielenia, obliczanie wartości absolutnej, bitowy iloczyn, suma i suma wykluczająca, bitowe przesunięcie w lewo oraz w prawo ze znakiem i z uzupełnianiem zerami.
scala> a + b res0: Int = 4854 scala> a - b res1: Int = -4772 scala> a * b res2: Int = 197333 scala> b / a res3: Int = 117 scala> b % a res4: Int = 16 scala> res1.abs res5: Int = 4772 scala> 0x0f & 0xf1 res6: Int = 1 scala> 0x0f | 0xf1 res7: Int = 255 scala> 0x0f ^ 0xf1 res8: Int = 254 scala> 1 << 4 res9: Int = 16 scala> -1 >> 26 res10: Int = -1 scala> -1 >>> 26 res11: Int = 63

