Какие степени числа 2 помнишь?

«Какие степени числа 2 помнишь?» — вопрос из категории Other, который задают на 24% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В контексте тестирования и IT, степени двойки часто встречаются в работе с памятью, битовыми масками, размерами данных и лимитами. Вот основные:

Часто используемые степени двойки:

  • 2^0 = 1
  • 2^1 = 2
  • 2^2 = 4
  • 2^3 = 8
  • 2^4 = 16
  • 2^5 = 32
  • 2^6 = 64
  • 2^7 = 128
  • 2^8 = 256
  • 2^9 = 512
  • 2^10 = 1024 (1 Кибибайт - KiB)
  • 2^16 = 65,536 (классический порт для TCP/UDP, максимальное значение unsigned short)
  • 2^20 = 1,048,576 (1 Мебибайт - MiB)
  • 2^30 = 1,073,741,824 (1 Гибибайт - GiB)
  • 2^32 = 4,294,967,296 (~4.3 млрд, максимальное значение для 32-битного unsigned int)

Практическое применение в тестировании:

  1. Проверка граничных значений: Часто нужно тестировать поля, принимающие размеры, кратные степеням двойки (например, загрузка файла размером 1 МБ, 2 МБ, 4 МБ, 8 МБ).
  2. Битовые флаги и маски: В API или настройках функции могут использовать битовые маски для комбинации опций.
  3. Анализ логов и дампов: Понимание шестнадцатеричных представлений, которые тесно связаны со степенями двойки.

Пример проверки на степень двойки в Python (полезно для валидации входных данных):

def is_power_of_two(n: int) -> bool:
    """Проверяет, является ли положительное целое число степенью двойки."""
    if n <= 0:
        return False
    # Битовый трюк: у степени двойки в бинарном виде одна единица.
    # n & (n - 1) обнуляет младший значащий бит. Для степени двойки результат будет 0.
    return (n & (n - 1)) == 0

# Примеры использования в тестах (pytest):
def test_file_size_validation():
    valid_sizes = [1024, 2048, 4096]  # Степени двойки
    invalid_sizes = [1000, 3000, 5000]

    for size in valid_sizes:
        assert is_power_of_two(size), f"{size} should be considered a valid power-of-two size"

    for size in invalid_sizes:
        assert not is_power_of_two(size), f"{size} should be considered invalid"