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 = 123 
d: 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:

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

Język programowania Scala Wydanie 2. Copyright © Grzegorz Balcerek 2016

Licencja Creative Commons

Ten utwór jest dostępny na licencji Creative Commons Uznanie autorstwa-Na tych samych warunkach 4.0 Międzynarodowe.

Oracle and Java are registered trademarks of Oracle and/or its affiliates. Other names may be trademarks of their respective owners.