Типы данных
-
В статье описаны типы данных и что это такое
Компьютер работает со значениями, а значения могут иметь разный размер и тип, или могут иметь одинаковый размер, но разный тип.
Все значения записываются в памяти с помощью едениц и нулей, то есть - в двоичной системе исчисления, эти еденицы называются битами (бит). В одном байте (байт) 8 бит, с помощью восьми бит, по разному их комбинируя, можно записать 256 разных разных состояний, поэтому у одного байта максимальное значение которое он может содержать это 255 (считается с нуля, вместе получается 256 состояний).Значения могут быть signed (может быть отрицательным) и unsigned (не может быть отрицательным), в зависимости от того что нужно программе. Их размерность от этого не меняется, лишь добавляется возможность отрицательных значений. Например у signed байта минимальное значение которое он может содержать -127, а максимальное 127.
Что бы записать значения больше чем 255, используются несколько байт. Максимальное unsigned значение из двух байт (16 бит) составляет 65535.
Чем больше бит использовано, тем больше можно записать, 8 байт позволяют записывать огромные объёмы данных.Для чисел с плавающей запятой используется похожая система, но из за того что количество состояний ограничено, появляется погрешность, эта погрешность существенна только для типа float, double использует 8 байт и его погрешность незначительна. Все типы с плавающей запятой по умолчанию signed.
Пример погрешности float:
При попытке записать5.04
во float 4 байта, в итоге получим5.039999962
.Помните что тип определяет лишь то как будет считано, или записано значение. Для компьютера типа не существует и существуют лишь гигантские массивы двоичных данных. Можно указать компьютеру прочитать значение с середины нужного, захватив кусок от другого, и получить полную ерунду, поэтому, при отладке нужно помнить о том что определение типа это задача самого пользователя.
При переполнении значения, например если попытаться добавить к байту в котором уже значение 255 ещё 1, происходит возвращение значения к его противоположному концу, в данном случае получится 0, если добавить 2 то получится 1 и тому подобное.
В Cheat Engine разные типы именуются в следующем порядке:
- byte - 1 байт, 8 бит
- word - 2 байта, 16 бит
- dword - 4 байта, 32 бит
- qword - 8 байт, 64 бит
С плавающей запятой:
- float - 4 байта, 32 бит
- double - 8 байт, 64 бит
С помощью значений можно описать любую информацию. Если вы открывали Cheat Engine то уже могли заметить что там есть тип String, это строковый тип, который читает значения из памяти и переводит их в текст. Существует множество различных кодировок текста, для кодировки букве присваивается номер, а потом этот номер записывается как значение. При чтении строки из памяти всё происходит наоборот, читается номер и ковертируется в понятный человеку символ.
Например слово "hello" это набор байт со значениями 104 101 108 108 111 в кодировке ASCII.
В Cheat Engine значения могут быть отображены в десятичной, или в шестнадцатиричной системе счисления. Шестнадцатиричная система счисления имеет максимальное значение 15 (F), вместо 9, для простоты понимания, когда мы начинаем добавлять, или менять цифру в десятичной системе - начинается новый десяток, в шестнадцатиричной так-же, сначала идут значения0 1 2 3 4 5 6 7 8 9 A B C D E F
, а потом добавляется10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 1A, 1B, 1C...
, так же как двоичная система имеет лишь 0 и 1, и 10 начинается уже после 1.0, 1, 10, 11...
Адреса памяти процесса обычно записываются в шестнадцатиричной системе, вам не нужно учиться считать в этих системах что бы работать с ними, главное это понимать принцип.
-