## Простые типы данных
#### Целые числа

| Имя     | Разрядность | Диапазон                                     |
| ------- | ----------- | -------------------------------------------- |
| `long`  | 64          | -9223372036854775808 ... 9223372036854775807 |
| `int`   | 32          | -2147483648 ... 2147483647                   |
| `short` | 16          | -32768 ... 32767                             |
| `byte`  | 8           | -128 ... 127                                 |
#### Действительные числа
| Имя      | Разрядность | Диапазон              |
| -------- | ----------- | --------------------- |
| `double` | 64          | 1.7e-308 ... 1.7e+308 |
| `float`  | 32          | 3.4e-038 ... 3.4e+038 |
#### Символьный тип
- `char`
#### Логический тип
- `boolean`
## Арифметические операторы
| Оператор | Результат                         |
| -------- | --------------------------------- |
| `+`      | Сложение                          |
| `-`      | Вычитание, унарный минус          |
| `*`      | Умножение                         |
| `/`      | Деление                           |
| `%`      | Деление по модулю                 |
| `++`     | Декремент                         |
| `+=`     | Сложение с присваиванием          |
| `-=`     | Вычитание с присваиванием         |
| `*=`     | Умножение с присваиванием         |
| `/=`     | Деление с присваиванием           |
| `%=`     | Деление по модулю с присваиванием |
| `--`     | Декремент                         |
## Булевы логические операторы
| Оператор | Результат                                                 |
| -------- | --------------------------------------------------------- |
| `&`      | Логическое И (AND)                                        |
| `\|`     | Логическое ИЛИ (OR)                                       |
| `^`      | Логическое исключающее ИЛИ (XOR)                          |
| `\|\|`   | Оператор OR быстрой оценки выражений (short circult OR)   |
| `&&`     | Оператор AND быстрой оценки выражений (short citcult AND) |
| `!`      | Логическое унарное отрицание (NOT)                        |
| `&=`     | И (AND) с присваиванием                                   |
| `=`      | ИЛИ (OR) с присваиванием                                  |
| `^=`     | Исключающее ИЛИ (XOR) с присваиванием                     |
| `==`     | Равно                                                     |
| `!=`     | Не равно                                                  |
| `? :`    | Тернарный оператор `if-then-else`                         |
## Целочисленные битовые операторы
| Оператор | Результат                                         |
| -------- | ------------------------------------------------- |
| `&`      | Побитовое И (AND)                                 |
| `1`      | Побитовое ИЛИ (OR)                                |
| `^`      | Побитовое исключающее ИЛИ (XOR)                   |
| `>>`     | Сдвиг вправо                                      |
| `>>>`    | Сдвиг вправо с заполнением нулями                 |
| `<<`     | Сдвиг влево                                       |
| `~`      | Побитовое унарное отрицание (NOT)                 |
| `&=`     | Побитовое И (AND) с присваиванием                 |
| `\|=`    | Побитовое ИЛИ (OR) с присваиванием                |
| `^=`     | Побитовое исключающее ИЛИ (XOR) с присваиванием   |
| `>>=`    | Сдвиг вправо с присваиванием                      |
| `>>>=`   | Сдвиг вправо с заполнением нулями с присваиванием |
| `<<=`    | Сдвиг влево с присваиванием                       |
## Операторы управления выполнением программы
1. Условный оператор `if-else`
2. Оператор выбора `switch`
3. Оператор цикла `while`
4. Оператор цикла `do-while`
5. Оператор цикла `for`
6. Операторы `break`, `continue`, `return`
## Массивы
#### Одномерные
Объявление массива:
```java
тип[] имя;
тип имя[];
```
Создание массива:
```java
new тип[количество элементов];
```
#### Двумерные
Объявление массива:
```java
тип[][] имя;
тип имя[][];
```
Создание массива:
```java
new тип[количество строк][количество столбцов];
```
  
```java
public class Main {
	public static void main(String[] args) {
		int n = 5;
		int a[] = new int[n];
		for (int i = 0; i < n; i++)
			a[i] = i * i;
		for (int i = 0; i < n; i++)
			System.out.print(a[i] + " ");
	}
}
```
## Строковые величины
#### Класс `String`
1. `length()` - определение длины строки
2. `charAt()` - выбор символа из строки
3. `substring()` - выбор подстроки
4. `equals()` - сравнение строк на равенство
5. `compareTo()` - лексикографическое сравнение строк
6. `indexOf()` - номер первого вхождения подстроки в строку
#### Класс `StringBuffer`
Конструкторы:
- `stringBuffer()` - создает пустой объект с емкостью 16 символов
- `stringBuffer(int capacity)` - создает пустой объект заданной емкости `capacity`
- `stringBuffer(String str)` - создает объект емкостью `str.length() + 16`
  
Методы:
- `append()` - добавление подстроки
- `insert()` - вставка подстроки
- `delete()` - удаление подстроки
- `replace()` - замена подстроки
  
Программа, считающая факториал числа:
```java
public class Main {
	public static void main(String[] args) {
		int f = 1, n = 14;
		for (int i = 1; i <= n; i++)
			f *= i;
		System.out.print("f = " + f);
	}
}
```
  
Обход ограничений через `BigInteger`:
```java
public class Main {
	public static void main(String[] args) {
		int n = 14;
		BigInteger f = BigInteger.valueOf(1);
		for (int i = 1; i <= n; i++) {
			BigInteger big_i = BigInteger.valueOf(i);
			f = f.multiply(big_i);
		}
		System.out.print("f = " + f);
	}
}
```
