Kotlin. Базові типи. Літерали. Числові константи. Допустимі межі числових типів

Базові типи. Літерали. Числові константи. Допустимі межі числових типів. Приклади


Зміст


Пошук на інших ресурсах:

1. Класифікація базових типів

Щоб використати у програмі деяку змінну (об’єкт), потрібно точно описати тип цієї змінної. Відповідно до описаного типу визначається призначення змінної у програмі. У мові Kotlin виділено 5 видів базових типів:

  • числові типи (числа);
  • логічний тип Boolean;
  • символьний тип Char;
  • рядковий тип String;
  • масив Array.

 

2. Класифікація числових типів. Характеристики типів

Серед базових типів найбільшою множиною представлені числові типи, які поділяються на дві групи:

  • цілочисельні типи Byte, Short, Int, Long;
  • типи з плаваючою комою (дійсні типи) Float, Double.

 

2.1. Цілочисельні типи

У нижченаведеній таблиці представлені характеристики цілочисельних типів.

Kotlin. Характеристики цілочисельних типів

Якщо у програмі фігурує ціле число (літерал), то для нього діють наступні правила:

  • якщо значення числа не перевищує діапазон значень типу Int, то тип цього цього числа встановлюється як Int;
  • якщо значення числа перевищує діапазон значень типу Int, то тип цього числа встановлюється як Long.

Якщо потрібно будь-яке ціле число (навіть невелике) встановити як число типу Long, то до цього числа додається суфікс L. Наприклад 23L, 232323L, 1000023939L.

Приклади цілочисельних літералів

25L
288
-3203
-209320302233L

 

2.2. Типи з плаваючою комою

Для чисел з плаваючою комою характерною є наступна таблиця.

Kotlin. Типи з плаваючою комою Float, Double

Згідно зі стандартом IEEE 754 для чисел з плаваючою комою характерними є наступні твердження:

  • тип Float відображає одинарну точність;
  • тип Double відображає подвійну точність.

Розділювачем розрядів у числах з плаваючою комою виступає символ ‘ . ‘ (крапка).

Приклади чисел з плаваючою комою

28.5     - тип Double
188.323F - тип Float
22.0f    - тип Float

 

3. Приклади оголошення та використання цілочисельних типів

Приклад 1. Піднесення до квадрату змінної цілого типу Int.

fun main(args: Array<String>) {
  // Піднесення до квадрату цілого числа
  // 1. Оголосити змінну типу Int
  val n : Int

  // 2. Ввести n
  print("n = ")
  n = readLine().toString().toInt()

  // 3. Обчислити n*n
  val square_n = n*n

  // 4. Вивести результат
  println("n*n = " + square_n)
}

Результат виконання програми

n = 35
n*n = 1225

Приклад 2. Піднести число n у степінь 5 та вивести результат. Використовуються типи Int, Long.

fun main(args: Array<String>) {
  // Піднесення числа до 5 степеня
  // 1. Оголосити змінні типу Int та Long
  val n : Int
  val res : Long // Результат

  // 2. Ввести n
  print("n = ")
  n = readLine().toString().toInt()

  // 3. Обчислити n^5
  val pow5 : Long
  pow5 = n.toLong()*n.toLong()*n.toLong()*n.toLong()*n.toLong()

  // 4. Вивести результат
  println("n^5 = " + pow5) // n^5 = 10000000000
}

 

4. Приклади оголошення та використання типів з плаваючою комою

Приклад 1. Програма обчислення площі круга за введеним радіусом. Демонстрація використання типу Float.

// Підключити математичну бібліотеку.
// Потрібно для використання константи PI
import kotlin.math.*

fun main(args: Array<String>) {
  // Програма обчислення площі круга за введеним радіусом
  // 1. Оголосити змінні
  var s:Float // шукана площа
  var r:Float // радіус

  // 2. Ввести радіус
  print("r = ")
  r = readLine().toString().toFloat()

  // 3. Обчислити площу
  s = (PI*r*r).toFloat()

  // 4. Вивести результат
  println("s = " + s)
}

Приклад 2. Програма обчислення коренів квадратного рівняння. Як базовий, використано тип Double. У програмі вводяться коефіцієнти рівняння a, b, c.

fun main(args: Array<String>) {
  // Обчислити корені квадратного рівняння
  // 1. Оголосити змінні типу Double
  val a:Double
  val b:Double
  val c:Double
  val D:Double
  val x1:Double
  val x2:Double

  // 2. Ввести a, b, c
  print("a = ")
  a = readLine().toString().toDouble()
  print("b = ")
  b = readLine().toString().toDouble()
  print("c = ")
  c = readLine().toString().toDouble()

  // 3. Обчислити дискримінант
  D = b*b-4*a*c

  // 4. Обчислити корені
  if (D<0)
    println("The equation has no roots.")
  else
  {
    // Використати функцію kotlin.math.sqrt()
    x1 = (-b-kotlin.math.sqrt(D))/(2*a)
    x2 = (-b+kotlin.math.sqrt(D))/(2*a)
    println("x1 = " + x1)
    println("x2 = " + x2)
  }
}

Результат виконання програми

a = 1
b = 1
c = -2
x1 = -2.0
x2 = 1.0

 

5. Представлення числових констант у шістнадцятковій системі числення

Цілочисельні константи можуть бути представлені у системі числення з основою 16. У цій системі числення для позначення числа використовуються:

  • цифри від 0 до 9;
  • букви латинського алфавіту A, B, C, D, E, F або a, b, c, d, e, f.

Кожна шістнадцяткова константа починається з пари символів 0x.

Приклад. Оголошення цілочисельних констант у шістнадцятковій системі числення

val h1 = 0x0A5 // h1 = 165 
val h2 = 0x0f8 // h2 = 248

У десятковій системі числення значення h1 рівне 165. Так само значення h2 рівне 248.

 

6. Представлення числових констант (літералів) у двійковій системі числення

Цілочисельні константи можуть бути представлені у двійковій системі числення. Щоб відрізнити двійкову систему числення кожна з констант починається з пари символів 0b або 0B. Враховуючи, що константи у двійковій системі, то значення цифр можуть бути 0 або 1.

Приклад.

// Константа у двійковій системі числення
val max = 0b11111111 // max = 255 у десятковій системі
println("max = " + max)

val min = 0B1000 // min = 8
println("min = " + min)

Нижченаведений код викличе помилку “The value is out of range”

val errorValue = 0b00213 // Помилка - тільки цифри 0 або 1

 

7. Представлення числових констант у більш читабельній формі. Символ ‘_’

Якщо в програмі використовуються числові константи, що мають велику кількість десяткових знаків, то можна задавати ці константи у зручній формі, розділяючи розряди символом ‘_’.

Приклад 1. Способи представлення числа 1000000000 (один мільярд):

// Звичайне представлення
var tt = 1000000000

// Представлення з допомогою символа підкреслення
tt = 1_000_000_000 // так зручніше

tt = 1000_000_000 // тисячу мільйонів

tt = 1_000_0_00_0_00 // так теж можна

Приклад 2. Способи представлення двійкового числа 15

// Звичайне представлення
var bin_number = 0b1111

// Представлення з допомогою підкреслення
bin_number = 0b1_1_1_1
bin_number = 0b11_11

 

8. Константи MIN_VALUE, MAX_VALUE. Допустимі межі числових типів

Для будь-якого числового типу (Int, UByte, Double, …) визначені константи MIN_VALUE та MAX_VALUE, які містять мінімально-можливе та максимально-можливе значення числового типу.

Наприклад, щоб визначити мінімально-можливе значення типу Short у програмі на мові Kotlin потрібно написати наступний вираз

Short.MIN_VALUE

Значення константи Short.MIN_VALUE рівне -32768.

Таким самим чином можна визначити граничні значення будь-якого числового типу: Int, Long, Double, ULong тощо.

 

9. Вивід допустимих значень типів з плаваючою комою. Приклад

У прикладі виводяться граничні значення типів Float та Double.

fun main(args: Array<String>) {
  // Вивести мінімальне та максимальне значення типів з плаваючою комою
  // 1. Тип Float
  val minFloat : Float
  val maxFloat : Float
  minFloat = kotlin.Float.MIN_VALUE
  maxFloat = Float.MAX_VALUE
  println("minFloat = " + minFloat)
  println("maxFloat = " + maxFloat)

  // 2. Тип Double
  val minDouble : Double = Double.MIN_VALUE
  val maxDouble : Double = Double.MAX_VALUE
  println("minDouble = " + minDouble)
  println("maxDouble = " + maxDouble)
}

Результат виконання програми

minFloat = 1.4E-45
maxFloat = 3.4028235E38
minDouble = 4.9E-324
maxDouble = 1.7976931348623157E308

 

10. Приклад використання беззнакових цілих типів. Вивід допустимих значень беззнакових типів

У прикладі виводиться мінімально-допустиме та максимально-допустиме значення беззнакових типів UByte

fun main(args: Array<String>) {
  // Вивести мінімальне та максимальне значення беззнакових цілих типів
  // 1. Тип UByte
  val minUByte : UByte
  val maxUByte : UByte
  minUByte = UByte.MIN_VALUE
  maxUByte = UByte.MAX_VALUE
  println("Type UByte: min = " + minUByte + ", max = " + maxUByte)

  // 2. Тип UShort
  val minUShort : kotlin.UShort // можна й так
  val maxUShort : UShort
  minUShort = UShort.MIN_VALUE
  maxUShort = kotlin.UShort.MAX_VALUE // можна й так
  println("Type UShort: min = " + minUShort + ", max = " + maxUShort)

  // 3. Тип UInt
  val minUInt : UInt = UInt.MIN_VALUE
  val maxUInt : UInt = UInt.MAX_VALUE
  println("Type UInt: min = " + minUInt + ", max = " + maxUInt)

  // 4. Тип ULong
  val minULong : ULong = ULong.MIN_VALUE
  val maxULong : ULong = ULong.MAX_VALUE
  println("Type ULong : min = " + minULong + ", max = " + maxULong)
}

Результат виконання програми

Type UByte: min = 0, max = 255
Type UShort: min = 0, max = 65535
Type UInt: min = 0, max = 4294967295
Type ULong : min = 0, max = 18446744073709551615

 


Зв’язані теми