Что важно знать
- Целые числа фиксированного размера переполняются молча.
- Двоичная дробь не представляет 0.1 точно — деньги во float не хранят.
- Длина строки в символах и в байтах — разные числа.
Дополнительный код и переполнение, плавающая точка, деньги, битовые операции, Unicode и UTF-8.
Практика. Найти в своём проекте все места, где деньги считаются во float, и перевести их на целые копейки или десятичный тип с тестами на округление.
Войдите, чтобы пройти тест: сданный тест отмечает тему пройденной на карте и в ИПР.
Почти везде — дополнительный код (two's complement): старший бит отрицательный, его вес −2ⁿ⁻¹.
Полный разборРезультат не влезает в разрядность — в Java, Go, C# он молча заворачивается по модулю 2ⁿ: MAX_VALUE + 1 = MIN_VALUE.
Полный разборdouble хранит число как двоичную дробь: знак, порядок и 52 бита мантиссы. 0.1 в двоичной системе бесконечна, как 1/3 в десятичной, — хранится приближение.
Полный разборДеньги — в целых минимальных единицах (копейках) или в десятичном типе: BigDecimal, Decimal, NUMERIC в базе. Не в double.
Полный разборAND &, OR |, XOR ^, NOT ~, сдвиги << и >> работают с каждым битом отдельно и стоят один такт.
Полный разборUnicode — таблица: каждому символу номер (кодовую точку), U+0416 — «Ж». UTF-8 — способ записать эти номера байтами.
Полный разборПосле собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.