SlideShare ist ein Scribd-Unternehmen logo
1 von 26
Downloaden Sie, um offline zu lesen
ОСНОВЫ ПРОГРАММНОГО
  КОНСТРУИРОВАНИЯ
                 Лекция № 3
              5 марта 2013 г.
ЧИСЛА В МАШИНЕ

• Нетединственного
 представления.

• Каждоепредставление
 имеет свои достоинства и
 недостатки.

• "123.45"   (строка) – тоже
 вариант.
ДВОИЧНАЯ СИСТЕМА

• Быстрее   всех.

• Память   можно представить как:

 • набор    байтов, или 8-битных чисел (char).

 • набор    коротких слов, или16-битных чисел (short int).

 • набор    слов, или 32-битных чисел (int).

 • набор    длинных слов, или 64-битных чисел (long int).
ПЕРЕВОД 2                 10

• Делим   пополам, сохраняя остатки.

• 337=168*2+1; 168=84*2+0; 84=42*2+0; 42=21*2+0;
 21=10*2+1; 10=5*2+0; 5=2*2+1; 2=1*2+0; 1=0*2+1.

• Записываем   в обратном порядке: 1010100012=33710.

• Обратно: 1010100012=20+24+26+28=1+16+64+256=337.
В ПАМЯТИ
0 0 0 0 0 0 0 1                           0 1 0 1 0 0 0 1
15       14   13   12   11   10   9   8   7   6   5   4   3   2   1   0

•   Для представления числа 337 нужно как минимум 2 байта.

    •   8 бит: 0..255

    •   16 бит: 0..65535.

    •   32 бита: 0..4294967295 (4,2 млрд.)

    •   64 бита: 0..18446744073709551615 (≃1,8*1019).
16-РИЧНАЯ СИСТЕМА

• Число   в двоичной записи делится на тетрады (по 4 бита):

 • 1010100012={0001}{0101}{0001}=15116.

• «Понятная»    запись констант:

 • 32   бита: диапазон чисел 0..FFFFFFFF16.

 • 0xDEADBEEF, 0xCAFEBABE, …
КАК ХРАНИТЬ ЗНАК

• Отдельной  памяти под знак нет, нужно втискивать его в те
 же 16 (8, 32, 64, …) бит.

• Кодируем   знак: «плюс» ➯ 0, «минус» ➯ 1.

• Попробуем   поместить знак в старший бит:

 • +337   ➯ 0000 0001 0101 00012

 • −337   ➯ 1000 0001 0101 00012
ПРОБЛЕМЫ СО ЗНАКОМ В
      СТАРШЕМ БИТЕ


• Простейшая арифметика (сложение, вычитание)
 отличается от беззнакового случая.

• Появляются   случаи +0 и −0.
ДРУГОЙ ПОДХОД К
ОТРИЦАТЕЛЬНЫМ ЧИСЛАМ

• Процессор выполняет операции сложения и вычитания по
 модулю, соответствующему размеру слова.

•В   коротком слове: (FFFF16+1) mod 216=0.

• Забудем   на секунду о модуле: X+1=0. Чему равно X?
ДВОИЧНЫЙ
  ДОПОЛНИТЕЛЬНЫЙ КОД
• −X➯ 2N−X, где N – размер слова.
 (X+(−X)) mod 2N = 2N mod 2N = 0.
 (X−(−X)) mod 2N = (X+X+2N) mod 2N = 2X.

• Единица
        в старшем бите все-таки служит индикатором знака.
 Для N=8:

 • 0000 00002 ➯ 0 (мин. положительное число).
   0111 11112 ➯ 127 (2N-1-1, макс. положительное число).
   1000 00002 ➯ −128 (−2N-1, мин. отрицательное число).
   1111 11112 ➯ −1 (макс. отрицательное число).
УМНОЖЕНИЕ И ДЕЛЕНИЕ



• Приходится   учитывать знак. А вы как думали?

• Знаковоеумножение и деление отличается от
 беззнакового.
ПЕРЕПОЛНЕНИЕ


• (−128)−1   = 1000 00002−1 = 0111 11112 = 127.
 Ого!

• 127+1   = 0111 11112+1 = 1000 00002 = −128.
 Ой!
НЕДОСТАТКИ ДВОИЧНОЙ
        СИСТЕМЫ

• Нормальные  люди (не программисты) хотят видеть числа
 в 10-тичной системе (а не 2, 8, 16, …)

• Преобразование в 10-тичную систему требует памяти и
 вычислений (последовательное деление на 10 с остатком).

• Для
    встроенных систем (калькуляторы, холодильники) это
 может быть критично.
ВАРИАНТЫ?

• Хранитьчисло прямо в строке (123456 ➯ "123456")
 слишком накладно по памяти.

• Промежуточный вариант: двоично-десятичное
 кодирование (BCD), т.е. битовое кодирование каждой
 десятичной цифры.

• Packed   BCD: на каждую цифру тратится 4 бита (полубайт).
PACKED BCD

•   33710 ➯ {3}{3}{7} ➯ {0011}2{0011}2{0111}2=11001101112.

•   BCD-представление числа 33710 аналогично двоичному
    представлению 33716! Для знака обычно выделяется младший
    полубайт:

    •   «+» ➯ C16=11002
        «−» ➯ D16=11012.

•   Со знаком: 33710 ➯ 337С16= 0011 0011 0111 11002.

•   В 32 битах можно представить числа ±9 999 999 (7 цифр+знак).
ОПЕРАЦИИ С PACKED BCD

•   Можно складывать и вычитать битовые представления
    напрямую, если после этого выполнять коррекцию!

    •   1116+1516=2616. Коррекция не требуется.

    •   1116+1916=2A16. Поскольку был выход за границы 0..9,
        добавляем еще 6 к переполнившемуся разряду:
        2A16+6=3016.

    •   Вычитание: A−B=A+(99....9)–B+1.

•   Умножение – столбиком, деление – уголком.
СИМВОЛЫ

• Кодировка: соответствие
 символа коду (и наоборот).     !"#$%&'()*+,—./
                               0123456789:;<=>?
• ASCII: основа   всего.       @ABCDEFGHIJKLMNO
 • 32   управляющих символа.   PQRSTUVWXYZ[]^_
                               `abcdefghijklmno
 • 96 информационных           pqrstuvwxyz{|}~_
   символов.
УПРАВЛЯЮЩИЕ СИМВОЛЫ
            ASCII
•   Null, 0x00, 0 – пустой          •   Line Feed, 0x0A, n – перевод
    символ.                              строки.

•   Bell, 0x07, a – звуковой        •   Line Tabulation, 0x0B, v –
    сигнал.                              вертикальная табуляция.

•   Backspace, 0x08, b – возврат    •   Form Feed, 0x0C, f – смена
    на шаг.                              страницы.

•   Character Tabulation, 0x09, t   •   Carriage Return, 0x0D, r –
    – горизонтальная табуляция.          возврат каретки.
UNICODE

• Решение   проблем с 8-битными кодировками.

• Композитные   символы.

• Много   кодов: 1 112 064.

• Требует
        либо много памяти (UTF-32), либо символы
 имеют переменную длину (UTF-8).
СТРОКИ



• Строка   – массив символов, но может иметь переменную
 длину!

• Нужно    как-то хранить длину, как?
ДЛИНА СТРОКИ

• Два   стандартных приема:

 • Хранение    длины в начале строки (первые 1/2/4 байта).

               6    s    t    r    i    n    g
 • Специальный  символ. В языке C этим символом является
   символ с кодом 0.

               s    t    r    i    n    g   0
«ВЕРЕВКИ»
             +


Основы
                        +


         +



 прог        раммного       конструирования
ОПЕРАЦИИ СО СТРОКАМИ
•   Конкатенация                   •   Поиск подстроки.

    ("abc" + "def" ➯ "abcdef").    •   Сравнение двух строк.

•   Вычисление длины.              •   Копирование.

•   Выделение подстроки.           •   Разбиение на подстроки
                                       (например, на слова).
•   Взятие символа по индексу i.
                                   •   Преобразование в число и
•   Удаление/замена подстроки.         наоборот.
•   Поиск символов.
СЕРИАЛИЗАЦИЯ

• Строкав широком смысле – последовательность байт
 известного размера.

• Сериализация: превращение любой структуры данных в
 строку (десериализация – восстановление структуры
 данных).

• Пример сериализации:
 массив целых чисел (int) переменной длины (N).
СЕРИАЛИЗАЦИЯ МАССИВА

•   N+1 целых чисел: длина + значения самого массива.

•   Big-endian и little-endian:

    •   1234567816 ➯ 12 34 56 78 (big-endian, «от старшего к
        младшему»).

    •   1234567816 ➯ 78 56 34 12 (little-endian, «от младшего к
        старшему»).

•   Сериализация матрицы? Произвольного множества векторов?
КОНЕЦ ТРЕТЬЕЙ ЛЕКЦИИ

Weitere ähnliche Inhalte

Ähnlich wie ОПК № 3 – Машинное представление целых чисел, символов, строк

ОПК № 4 – Представление действительных чисел
ОПК № 4 – Представление действительных чиселОПК № 4 – Представление действительных чисел
ОПК № 4 – Представление действительных чиселVladimir Parfinenko
 
Андрей Аксенов "Магия сжатия"
Андрей Аксенов "Магия сжатия"Андрей Аксенов "Магия сжатия"
Андрей Аксенов "Магия сжатия"Fwdays
 
Эффективное использование x86-совместимых CPU (Алексей Тутубалин)
Эффективное использование x86-совместимых CPU (Алексей Тутубалин)Эффективное использование x86-совместимых CPU (Алексей Тутубалин)
Эффективное использование x86-совместимых CPU (Алексей Тутубалин)Ontico
 
Помехоустойчивое кодирование - Циклические коды
Помехоустойчивое кодирование - Циклические кодыПомехоустойчивое кодирование - Циклические коды
Помехоустойчивое кодирование - Циклические кодыnauryzbaevr
 
Продолжаем говорить про арифметику
Продолжаем говорить про арифметикуПродолжаем говорить про арифметику
Продолжаем говорить про арифметикуAndrey Akinshin
 
CodeFest 2013. Анастасьев О. — Класс!ная Cassandra
CodeFest 2013. Анастасьев О. — Класс!ная CassandraCodeFest 2013. Анастасьев О. — Класс!ная Cassandra
CodeFest 2013. Анастасьев О. — Класс!ная CassandraCodeFest
 
Доклад на Highload-2012
Доклад на Highload-2012Доклад на Highload-2012
Доклад на Highload-2012Alex Tutubalin
 
C:\fakepath\кмсзи экз
C:\fakepath\кмсзи   экзC:\fakepath\кмсзи   экз
C:\fakepath\кмсзи экзdarina andr
 
012
012012
012JIuc
 
23.02.15_Симметричные криптосистемы.pptx
23.02.15_Симметричные  криптосистемы.pptx23.02.15_Симметричные  криптосистемы.pptx
23.02.15_Симметричные криптосистемы.pptxTamaraRadivilova1
 
генераторы псевдослучайных последовательностей и шифрование методом гаммирования
генераторы псевдослучайных последовательностей и шифрование методом гаммированиягенераторы псевдослучайных последовательностей и шифрование методом гаммирования
генераторы псевдослучайных последовательностей и шифрование методом гаммированияhmyrhik nikita
 
кодирование инф.
кодирование инф.кодирование инф.
кодирование инф.Rushitech
 
Кодирование текстовой информации 10 класс
Кодирование текстовой информации 10 классКодирование текстовой информации 10 класс
Кодирование текстовой информации 10 классНаталья Зиненко
 
Низкоуровневые оптимизации. Андрей Аксенов. Unigine Open Air 2013
Низкоуровневые оптимизации. Андрей Аксенов. Unigine Open Air 2013Низкоуровневые оптимизации. Андрей Аксенов. Unigine Open Air 2013
Низкоуровневые оптимизации. Андрей Аксенов. Unigine Open Air 2013Unigine Corp.
 
Хочу все сжать / Андрей Аксенов (Sphinx)
Хочу все сжать / Андрей Аксенов (Sphinx)Хочу все сжать / Андрей Аксенов (Sphinx)
Хочу все сжать / Андрей Аксенов (Sphinx)Ontico
 
9 1.2 - представление информации в компьютере
9 1.2 - представление информации в компьютере9 1.2 - представление информации в компьютере
9 1.2 - представление информации в компьютереjula-mam
 
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...Ontico
 
Address Sanitizer или как сделать программы на c/с++ надежнее и безопаснее (К...
Address Sanitizer или как сделать программы на c/с++ надежнее и безопаснее (К...Address Sanitizer или как сделать программы на c/с++ надежнее и безопаснее (К...
Address Sanitizer или как сделать программы на c/с++ надежнее и безопаснее (К...Ontico
 

Ähnlich wie ОПК № 3 – Машинное представление целых чисел, символов, строк (20)

ОПК № 4 – Представление действительных чисел
ОПК № 4 – Представление действительных чиселОПК № 4 – Представление действительных чисел
ОПК № 4 – Представление действительных чисел
 
Андрей Аксенов "Магия сжатия"
Андрей Аксенов "Магия сжатия"Андрей Аксенов "Магия сжатия"
Андрей Аксенов "Магия сжатия"
 
Эффективное использование x86-совместимых CPU (Алексей Тутубалин)
Эффективное использование x86-совместимых CPU (Алексей Тутубалин)Эффективное использование x86-совместимых CPU (Алексей Тутубалин)
Эффективное использование x86-совместимых CPU (Алексей Тутубалин)
 
Помехоустойчивое кодирование - Циклические коды
Помехоустойчивое кодирование - Циклические кодыПомехоустойчивое кодирование - Циклические коды
Помехоустойчивое кодирование - Циклические коды
 
Продолжаем говорить про арифметику
Продолжаем говорить про арифметикуПродолжаем говорить про арифметику
Продолжаем говорить про арифметику
 
CodeFest 2013. Анастасьев О. — Класс!ная Cassandra
CodeFest 2013. Анастасьев О. — Класс!ная CassandraCodeFest 2013. Анастасьев О. — Класс!ная Cassandra
CodeFest 2013. Анастасьев О. — Класс!ная Cassandra
 
Доклад на Highload-2012
Доклад на Highload-2012Доклад на Highload-2012
Доклад на Highload-2012
 
C:\fakepath\кмсзи экз
C:\fakepath\кмсзи   экзC:\fakepath\кмсзи   экз
C:\fakepath\кмсзи экз
 
012
012012
012
 
Step cpp0201
Step cpp0201Step cpp0201
Step cpp0201
 
23.02.15_Симметричные криптосистемы.pptx
23.02.15_Симметричные  криптосистемы.pptx23.02.15_Симметричные  криптосистемы.pptx
23.02.15_Симметричные криптосистемы.pptx
 
генераторы псевдослучайных последовательностей и шифрование методом гаммирования
генераторы псевдослучайных последовательностей и шифрование методом гаммированиягенераторы псевдослучайных последовательностей и шифрование методом гаммирования
генераторы псевдослучайных последовательностей и шифрование методом гаммирования
 
кодирование инф.
кодирование инф.кодирование инф.
кодирование инф.
 
Кодирование текстовой информации 10 класс
Кодирование текстовой информации 10 классКодирование текстовой информации 10 класс
Кодирование текстовой информации 10 класс
 
Низкоуровневые оптимизации. Андрей Аксенов. Unigine Open Air 2013
Низкоуровневые оптимизации. Андрей Аксенов. Unigine Open Air 2013Низкоуровневые оптимизации. Андрей Аксенов. Unigine Open Air 2013
Низкоуровневые оптимизации. Андрей Аксенов. Unigine Open Air 2013
 
Хочу все сжать / Андрей Аксенов (Sphinx)
Хочу все сжать / Андрей Аксенов (Sphinx)Хочу все сжать / Андрей Аксенов (Sphinx)
Хочу все сжать / Андрей Аксенов (Sphinx)
 
9 1.2 - представление информации в компьютере
9 1.2 - представление информации в компьютере9 1.2 - представление информации в компьютере
9 1.2 - представление информации в компьютере
 
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
 
ARM64
ARM64ARM64
ARM64
 
Address Sanitizer или как сделать программы на c/с++ надежнее и безопаснее (К...
Address Sanitizer или как сделать программы на c/с++ надежнее и безопаснее (К...Address Sanitizer или как сделать программы на c/с++ надежнее и безопаснее (К...
Address Sanitizer или как сделать программы на c/с++ надежнее и безопаснее (К...
 

ОПК № 3 – Машинное представление целых чисел, символов, строк

  • 1. ОСНОВЫ ПРОГРАММНОГО КОНСТРУИРОВАНИЯ Лекция № 3 5 марта 2013 г.
  • 2. ЧИСЛА В МАШИНЕ • Нетединственного представления. • Каждоепредставление имеет свои достоинства и недостатки. • "123.45" (строка) – тоже вариант.
  • 3. ДВОИЧНАЯ СИСТЕМА • Быстрее всех. • Память можно представить как: • набор байтов, или 8-битных чисел (char). • набор коротких слов, или16-битных чисел (short int). • набор слов, или 32-битных чисел (int). • набор длинных слов, или 64-битных чисел (long int).
  • 4. ПЕРЕВОД 2 10 • Делим пополам, сохраняя остатки. • 337=168*2+1; 168=84*2+0; 84=42*2+0; 42=21*2+0; 21=10*2+1; 10=5*2+0; 5=2*2+1; 2=1*2+0; 1=0*2+1. • Записываем в обратном порядке: 1010100012=33710. • Обратно: 1010100012=20+24+26+28=1+16+64+256=337.
  • 5. В ПАМЯТИ 0 0 0 0 0 0 0 1 0 1 0 1 0 0 0 1 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 • Для представления числа 337 нужно как минимум 2 байта. • 8 бит: 0..255 • 16 бит: 0..65535. • 32 бита: 0..4294967295 (4,2 млрд.) • 64 бита: 0..18446744073709551615 (≃1,8*1019).
  • 6. 16-РИЧНАЯ СИСТЕМА • Число в двоичной записи делится на тетрады (по 4 бита): • 1010100012={0001}{0101}{0001}=15116. • «Понятная» запись констант: • 32 бита: диапазон чисел 0..FFFFFFFF16. • 0xDEADBEEF, 0xCAFEBABE, …
  • 7. КАК ХРАНИТЬ ЗНАК • Отдельной памяти под знак нет, нужно втискивать его в те же 16 (8, 32, 64, …) бит. • Кодируем знак: «плюс» ➯ 0, «минус» ➯ 1. • Попробуем поместить знак в старший бит: • +337 ➯ 0000 0001 0101 00012 • −337 ➯ 1000 0001 0101 00012
  • 8. ПРОБЛЕМЫ СО ЗНАКОМ В СТАРШЕМ БИТЕ • Простейшая арифметика (сложение, вычитание) отличается от беззнакового случая. • Появляются случаи +0 и −0.
  • 9. ДРУГОЙ ПОДХОД К ОТРИЦАТЕЛЬНЫМ ЧИСЛАМ • Процессор выполняет операции сложения и вычитания по модулю, соответствующему размеру слова. •В коротком слове: (FFFF16+1) mod 216=0. • Забудем на секунду о модуле: X+1=0. Чему равно X?
  • 10. ДВОИЧНЫЙ ДОПОЛНИТЕЛЬНЫЙ КОД • −X➯ 2N−X, где N – размер слова. (X+(−X)) mod 2N = 2N mod 2N = 0. (X−(−X)) mod 2N = (X+X+2N) mod 2N = 2X. • Единица в старшем бите все-таки служит индикатором знака. Для N=8: • 0000 00002 ➯ 0 (мин. положительное число). 0111 11112 ➯ 127 (2N-1-1, макс. положительное число). 1000 00002 ➯ −128 (−2N-1, мин. отрицательное число). 1111 11112 ➯ −1 (макс. отрицательное число).
  • 11. УМНОЖЕНИЕ И ДЕЛЕНИЕ • Приходится учитывать знак. А вы как думали? • Знаковоеумножение и деление отличается от беззнакового.
  • 12. ПЕРЕПОЛНЕНИЕ • (−128)−1 = 1000 00002−1 = 0111 11112 = 127. Ого! • 127+1 = 0111 11112+1 = 1000 00002 = −128. Ой!
  • 13. НЕДОСТАТКИ ДВОИЧНОЙ СИСТЕМЫ • Нормальные люди (не программисты) хотят видеть числа в 10-тичной системе (а не 2, 8, 16, …) • Преобразование в 10-тичную систему требует памяти и вычислений (последовательное деление на 10 с остатком). • Для встроенных систем (калькуляторы, холодильники) это может быть критично.
  • 14. ВАРИАНТЫ? • Хранитьчисло прямо в строке (123456 ➯ "123456") слишком накладно по памяти. • Промежуточный вариант: двоично-десятичное кодирование (BCD), т.е. битовое кодирование каждой десятичной цифры. • Packed BCD: на каждую цифру тратится 4 бита (полубайт).
  • 15. PACKED BCD • 33710 ➯ {3}{3}{7} ➯ {0011}2{0011}2{0111}2=11001101112. • BCD-представление числа 33710 аналогично двоичному представлению 33716! Для знака обычно выделяется младший полубайт: • «+» ➯ C16=11002 «−» ➯ D16=11012. • Со знаком: 33710 ➯ 337С16= 0011 0011 0111 11002. • В 32 битах можно представить числа ±9 999 999 (7 цифр+знак).
  • 16. ОПЕРАЦИИ С PACKED BCD • Можно складывать и вычитать битовые представления напрямую, если после этого выполнять коррекцию! • 1116+1516=2616. Коррекция не требуется. • 1116+1916=2A16. Поскольку был выход за границы 0..9, добавляем еще 6 к переполнившемуся разряду: 2A16+6=3016. • Вычитание: A−B=A+(99....9)–B+1. • Умножение – столбиком, деление – уголком.
  • 17. СИМВОЛЫ • Кодировка: соответствие символа коду (и наоборот). !"#$%&'()*+,—./ 0123456789:;<=>? • ASCII: основа всего. @ABCDEFGHIJKLMNO • 32 управляющих символа. PQRSTUVWXYZ[]^_ `abcdefghijklmno • 96 информационных pqrstuvwxyz{|}~_ символов.
  • 18. УПРАВЛЯЮЩИЕ СИМВОЛЫ ASCII • Null, 0x00, 0 – пустой • Line Feed, 0x0A, n – перевод символ. строки. • Bell, 0x07, a – звуковой • Line Tabulation, 0x0B, v – сигнал. вертикальная табуляция. • Backspace, 0x08, b – возврат • Form Feed, 0x0C, f – смена на шаг. страницы. • Character Tabulation, 0x09, t • Carriage Return, 0x0D, r – – горизонтальная табуляция. возврат каретки.
  • 19. UNICODE • Решение проблем с 8-битными кодировками. • Композитные символы. • Много кодов: 1 112 064. • Требует либо много памяти (UTF-32), либо символы имеют переменную длину (UTF-8).
  • 20. СТРОКИ • Строка – массив символов, но может иметь переменную длину! • Нужно как-то хранить длину, как?
  • 21. ДЛИНА СТРОКИ • Два стандартных приема: • Хранение длины в начале строки (первые 1/2/4 байта). 6 s t r i n g • Специальный символ. В языке C этим символом является символ с кодом 0. s t r i n g 0
  • 22. «ВЕРЕВКИ» + Основы + + прог раммного конструирования
  • 23. ОПЕРАЦИИ СО СТРОКАМИ • Конкатенация • Поиск подстроки. ("abc" + "def" ➯ "abcdef"). • Сравнение двух строк. • Вычисление длины. • Копирование. • Выделение подстроки. • Разбиение на подстроки (например, на слова). • Взятие символа по индексу i. • Преобразование в число и • Удаление/замена подстроки. наоборот. • Поиск символов.
  • 24. СЕРИАЛИЗАЦИЯ • Строкав широком смысле – последовательность байт известного размера. • Сериализация: превращение любой структуры данных в строку (десериализация – восстановление структуры данных). • Пример сериализации: массив целых чисел (int) переменной длины (N).
  • 25. СЕРИАЛИЗАЦИЯ МАССИВА • N+1 целых чисел: длина + значения самого массива. • Big-endian и little-endian: • 1234567816 ➯ 12 34 56 78 (big-endian, «от старшего к младшему»). • 1234567816 ➯ 78 56 34 12 (little-endian, «от младшего к старшему»). • Сериализация матрицы? Произвольного множества векторов?