Двоичное кодирование текстовой информации
Минимальные единицы измерения информации – это бит и байт.
Один бит позволяет закодировать 2 значения (0 или 1).
Используя два бита, можно закодировать 4 значения: 00, 01, 10, 11.
Тремя битами кодируются 8 разных значений: 000, 001, 010, 011, 100, 101, 110, 111.
Из приведенных примеров видно, что добавление одного бита увеличивает в 2 раза то количество значений, которое можно закодировать:
1 бит кодирует –> 2 разных значения (21 = 2),
2 бита кодируют –> 4 разных значения (22 = 4),
3 бита кодируют –> 8 разных значений (23 = 8),
4 бита кодируют –> 16 разных значений (24 = 16),
5 бит кодируют –> 32 разных значения (25 = 32),
6 бит кодируют –> 64 разных значения (26 = 64),
7 бит кодируют –> 128 разных значения (27 = 128),
8 бит кодируют –> 256 разных значений (28 = 256),
9 бит кодируют –> 512 разных значений (29 = 512),
10 бит кодируют –> 1024 разных значений (210 = 1024).
Мы помним, что в одном байте не 9 и не 10 бит, а всего 8. Следовательно, с помощью одного байта можно закодировать 256 разных символов. Как Вы думаете, много это или мало? Давайте посмотрим на примере кодирования текстовой информации.
В русском языке 33 буквы и, значит, для их кодирования надо 33 байта. Компьютер различает большие (заглавные) и маленькие (строчные) буквы, только если они кодируются различными кодами. Значит, чтобы закодировать большие и маленькие буквы русского алфавита, потребуется 66 байт.
Для больших и маленьких букв английского алфавита потребуется ещё 52 байта. В итоге получается 66 + 52 = 118 байт. Сюда надо ещё добавить цифры (от 0 до 9), символ «пробел», все знаки препинания: точку, запятую, тире, восклицательный и вопросительный знаки, скобки: круглые, фигурные и квадратные, а также знаки математических операций: +, –, =, / (это деление), * (это умножение). Добавим также специальные символы: %, $, &, @, #, № и др. Все это вместе взятое как раз и составляет около 256 различных символов.
А дальше дело осталось за малым. Надо сделать так, чтобы все люди на Земле договорились между собой о том, какие именно коды (с 0 до 255, т.е. всего 256) присвоить символам. Допустим, все люди договорились, что код 33 означает восклицательный знак (!), а код 63 – вопросительный знак (?). И так же – для всех применяемых символов. Тогда это будет означать, что текст, набранный одним человеком на своем компьютере, всегда можно будет прочитать и распечатать другому человеку на другом компьютере.
Таблица ASCII
Такая всеобщая договоренность об одинаковом использовании чего-либо называется стандартом. В нашем случае стандарт должен представлять из себя таблицу, в которой зафиксировано соответствие кодов (с 0 до 255) и символов. Подобная таблица называется таблицей кодировки.
Но не всё так просто. Ведь символы, которые хороши, например, для Греции, не подойдут для Турции потому, что там используются другие буквы. Аналогично то, что хорошо для США, не подойдет для России, а то, что подойдет для России, не годится для Германии.
Поэтому приняли решение разделить таблицу кодов пополам.
Первые 128 кодов (с 0 до 127) должны быть стандартными и обязательными для всех стран и для всех компьютеров, это – международный стандарт.
А со второй половиной таблицы кодов (с 128 до 255) каждая страна может делать все, что угодно, и создавать в этой половине свой стандарт – национальный.
Первую (международную) половину таблицы кодов называют таблицей ASCII, которую создали в США и приняли во всем мире.
За вторую половину кодовой таблицы (с 128 до 255) стандарт ASCII не отвечает. Разные страны создают здесь свои национальные таблицы кодов.
Может быть и так, что в пределах одной страны действуют разные стандарты, предназначенные для различных компьютерных систем, но только в пределах второй половины таблицы кодов.
Коды из международной таблицы ASCII
0-31 – особые символы, которые не распечатываются на экране или на принтере, а служат для выполнения специальных действий (например, для «перевода каретки» – перехода текста на новую строку, или для «табуляции» – установки курсора на специальные позиции в строке текста и т. п.).
32 – пробел (разделитель между словами – это тоже символ, подлежащий кодировке, хоть он и отображается в виде «пустого места» между словами и символами),
33-47 – специальные символы (круглые скобки и пр.) и знаки препинания (точка, запятая и пр.),
48-57 – цифры от 0 до 9,
58-64 – математические символы (плюс (+), минус (-), умножить (*), разделить (/) и пр.) и знаки препинания (двоеточие, точка с запятой и пр.),
65-90 – заглавные (прописные) английские буквы,
91-96 – специальные символы (квадратные скобки и пр.),
97-122 – маленькие (строчные) английские буквы,
123-127 – специальные символы (фигурные скобки и пр.).
За пределами таблицы ASCII, начиная с цифры 128 по 159, идут заглавные (прописные) русские буквы, а со 160 по 170 и с 224 по 239 – маленькие (строчные) русские буквы.
Кодировка слова МИР
Пользуясь показанной кодировкой, мы можем представить себе, как компьютер кодирует и затем воспроизводит, например, слово МИР (заглавными буквами). Это слово представляется тремя кодами: букве М соответствует код 140 (по национальной российской системе кодировки), И – это код 136 и Р – это 144.
Но как уже говорилось ранее, компьютер воспринимает информацию только в двоичном виде, т.е. в виде последовательности нулей и единиц. Каждый байт, соответствующий каждой букве слова МИР, содержит последовательность из восьми нулей и единиц. Используя правила перевода десятичной информации в двоичную, можно заменить десятичные значения кодов букв на их двоичные аналоги.
Десятичной цифре 140 соответствует двоичное число 10001100. Это можно проверить, если сделать следующие вычисления: 27 + 23 +22 = 140. Степень, в которую возводится каждая «двойка» – это номер позиции двоичного числа 10001100, в которой стоит «1», причем позиции нумеруются справа налево, начиная с нулевого номера позиции: 0, 1, 2 и т.д.
Более подробно о переводе чисел из одной системы счисления в другую можно узнать, например, из учебников по информатике или через Интернет.
Аналогичным образом можно убедиться, что цифре 136 соответствует двоичное число 10001000 (проверка: 27 + 23 = 136). А цифре 144 соответствует двоичное число 10010000 (проверка: 27 + 24 = 144).
Таким образом, в компьютере слово МИР будет храниться в виде следующей последовательности нулей и единиц (бит): 10001100 10001000 10010000.
Разумеется, что все показанные выше преобразования данных производятся с помощью компьютерных программ, и они не видны пользователям. Они лишь наблюдают результаты работы этих программ, как при вводе информации с помощью клавиатуры, так и при ее выводе на экран монитора или на принтер.
Следует отметить, что на уровне изучения компьютерной грамотности пользователям компьютеров не обязательно знать двоичную систему счисления. Достаточно иметь представление о десятичных кодах символов. Только системные программисты на практике используют двоичную, шестнадцатеричную, восьмеричную и иные системы счисления.
Упражнения по компьютерной грамотности, позволяющие самостоятельно увидеть и почувствовать описанные системы кодировок, приведены в статье «Проверяем, кодирует ли компьютер текст?»
P.S. Статья закончилась, но можно еще прочитать:
Представление информации в компьютере
Что такое переменная в программировании и чем она отличается от константы
Смотрим на кодировку цвета
Получайте актуальные статьи по компьютерной грамотности прямо на ваш почтовый ящик.
Уже более 3.000 подписчиков
Важно: необходимо подтвердить свою подписку! В своей почте откройте письмо для активации и кликните по указанной там ссылке. Если письма нет, проверьте папку Спам.
Автор: Надежда Широбокова
22 июня 2010
наименьшая и самая большая, последовательность
Кратко об измерении цифровых данных
Измерение информационного веса на компьютерах осуществляется с помощью алфавитного метода. Согласно этому способу знак каждого сообщения несет определенное количество информации.
Минимальная единица измерения
Данные в ЭВМ хранятся и обрабатываются в двоичной системе, то есть буквы, цифры и другие символы выглядят как код из единиц и нулей. Вес одного двоичного знака равен одному биту.
Бит – это наименьшая единица измерения цифровых данных.
В 1 бит входит малое количество информации, так как эта единица измерения может принимать только одно сообщение из двух возможных – сигнал включен или выключен. Пример: да или нет, влево или вправо и т.д.
Для того, чтобы закодировать больше информации, ввели более крупную величину – байт. Один байт равен 8 бит и включает 256 возможных комбинаций из 0 и 1. Именно в 8-битном стандарте кодируют текстовые данные.
Более крупные единицы измерения
Возрастание объема данных, обрабатываемых вычислительными устройствами, привело к введению более крупных единиц измерения.
1 килобайт (Кб / Кбайт) = 1024 байт = 210 байт.
1 мегабайт (Мб / Мбайт) = 1024 килобайт = 210 Кбайт.
1 гигабайт (Гб / Гбайт) = 1024 мегабайт = 2 10 Мбайт.
1 терабайт (Тб / Тбайт) = 1024 гигабайт = 210 Гбайт.
В Кбайтах, Мбайтах, Гбайтах и Тбайтах измеряется объем запоминающих устройств. Максимальный объем современных жестких дисков достигает 14 ТБ. Биты, килобайты, мегабайты используются для измерения скорости передачи данных.
Самые большие единицы измерения
Существуют еще более крупные величины в метрологии цифровых измерений:
1 Петабайт (Пб /Пбайт) = 1024 Тбайт = 210 Тбайт.
1 Эксабайт (Эб / Эбайт) = 1024 Пбайт = 210 Пбайт.
1 Зеттабайт (Зб / Збайт) = 1024 Эбайт = 210 Эбайт.
1 Йоттабайт (Йб / Йбайт) = 1024 Збайт = 210 Збайт.
Петабайты используют для измерения объема данных, обрабатываемых в интернете. Эксабайты удобно применять для хранения архивных документов. Зеттабайты и Йоттабайты необходимы для использования в будущем.
Примеры подсчета объема информации в мультимедиа, тексте
Понятие мультимедиа включает в себя файлы, содержащие изображения, звук и видео. Для определения веса такой формы информации чаще применяют килобайты и мегабайты.
Расчет информационного веса мультимедийного файла
Разберем способ подсчета количества данных на примере стандартной фотографии 10 на 15. Файл имеет размеры 1181х1772 пикселей. Для кодировки одного пикселя требуется 3 байта, следовательно, информационный объем файла вычисляется в следующей последовательности:
1181 х 1772 х 3 = 6 278 196 байт.
Чтобы перевести это количество в килобайты, разделим результат на 1024 и получим 6131,05 Кбайт. Для обозначения этой величины более удобно использовать мегабайты. Для перевода выполним следующее арифметическое действие:
6131,05 / 1024 = 5,99 Мбайт.
Измерение объема текстовой информации
Текст состоит из символов. В двоичной системе счисления вес одного текстового знака равен 1 байту. Для определения объема текстовой информации существует порядок подсчета количества символов, содержащихся в сообщении. При этом нужно учитывать не только буквы, но и пробелы, знаки препинания и цифры. Эти элементы компьютер также считывает с помощью двоичного кода.
Определим объем предложения:
Интернет – это глобальная информационная система.
В сообщении 49 символов, значит, оно весит 49 байт.
Кодирование символов. Байт.
<<Назад | Содержание | Далее>>
На основании одной ячейки информационной ёмкостью 1 бит можно закодировать только 2 различных состояния. Для того чтобы каждый символ, который можно ввести с клавиатуры в латинском регистре, получил свой уникальный двоичный код, требуется 7 бит. На основании последовательности из 7 бит, в соответствии с формулой Хартли, может быть получено N=27=128 различных комбинаций из нулей и единиц, т.е. двоичных кодов. Поставив в соответствие каждому символу его двоичный код, мы получим кодировочную таблицу. Человек оперирует символами, компьютер – их двоичными кодами.
Для латинской раскладки клавиатуры такая кодировочная таблица одна на весь мир, поэтому текст, набранный с использованием латинской раскладки, будет адекватно отображен на любом компьютере. Эта таблица носит название ASCII (American Standard Code of Information Interchange) по-английски произносится [э́ски], по-русски произносится [а́ски]. Ниже приводится вся таблица ASCII, коды в которой указаны в десятичном виде. По ней можно определить, что когда вы вводите с клавиатуры, скажем, символ “*”, компьютер его воспринимает как код 42(10), в свою очередь 42(10)=101010(2) – это и есть двоичный код символа “*”. Коды с 0 по 31 в этой таблице не задействованы.
Таблица 8.
Таблица символов ASCII
код |
символ |
код |
символ |
код |
символ |
код |
символ |
код |
символ |
код |
символ |
32 |
Пробел |
48 |
. |
64 |
@ |
80 |
P |
96 |
‘ |
112 |
p |
33 |
! |
49 |
0 |
65 |
A |
81 |
Q |
97 |
a |
113 |
q |
34 |
« |
50 |
1 |
66 |
B |
82 |
R |
98 |
b |
114 |
r |
35 |
# |
51 |
2 |
67 |
C |
83 |
S |
99 |
c |
115 |
s |
36 |
$ |
52 |
3 |
68 |
D |
84 |
T |
100 |
d |
116 |
t |
37 |
% |
53 |
4 |
69 |
E |
85 |
U |
101 |
e |
117 |
u |
38 |
& |
54 |
5 |
70 |
F |
86 |
V |
102 |
f |
118 |
v |
39 |
‘ |
55 |
6 |
71 |
G |
87 |
W |
103 |
g |
119 |
w |
40 |
( |
56 |
7 |
72 |
H |
88 |
X |
104 |
h |
120 |
x |
41 |
) |
57 |
8 |
73 |
I |
89 |
Y |
105 |
i |
121 |
y |
42 |
* |
58 |
9 |
74 |
J |
90 |
Z |
106 |
j |
122 |
z |
43 |
+ |
59 |
: |
75 |
K |
91 |
[ |
107 |
k |
123 |
{ |
44 |
, |
60 |
; |
76 |
L |
92 |
\ |
108 |
l |
124 |
| |
45 |
— |
61 |
< |
77 |
M |
93 |
] |
109 |
m |
125 |
} |
46 |
. |
110 |
n |
126 |
~ |
||||||
47 |
/ |
63 |
? |
79 |
O |
95 |
_ |
111 |
o |
127 |
DEL |
Чтобы хранить также и коды национальных символов каждой страны (в нашем случае – символов кириллицы) требуется добавить еще 1 бит, что увеличит количество уникальных комбинаций из нулей и единиц вдвое, т. е. в нашем распоряжении дополнительно появится 128 свободных кодов (со 128-го по 255-й), в соответствие которым можно поставить символы русского алфавита.
Таким образом, отведя под хранение информации о коде каждого символа 8 бит, мы получим N=28=256 уникальных двоичных кодов, что достаточно, чтобы закодировать все символы, которые можно ввести с клавиатуры.
Так мы подошли к необходимости познакомиться с еще одной базовой единицей измерения – байтом.
Байт — последовательность из 8 бит.
1 байт = 23 бит = 8 бит.
На основании одного байта можно получить 28=256 уникальных двоичных кодов.
В современных кодировочных таблицах под хранение информации о коде каждого символа отводится 1 байт.
1 символ = 1 байт.
В байтах измеряется объем данных (V) при их хранении и передаче по каналам связи. Например, текст “Добрый день!” занимает объем равный 12 байтам.
Биты в байте нумеруются с конца с 0-го по 7-й. Минимальная комбинация на основании одного байта – восемь нулей, максимальная – восемь единиц. Рис. 18а.
11111111(2)=27+26+25+24+23+22+21+20=128+64+32+16+8+4+2+1=255(10)
При хранении на физическом уровне каждый байт может быть реализован, например, на базе восьми конденсаторов, каждый из которых либо разряжен (0), либо заряжен (1). Рис. 18b.
|
|
Рис. 18а. Байт: минимальная и максимальная комбинации |
Рис. 18b. Байт: соответствие двоичного числа и электрического импульса. |
Возвращаясь к кодировочным таблицам, заметим, что на сегодняшний день в использовании не одна, а несколько кодировочных таблиц, включающих коды кириллицы, – это стандарты, выработанные в разные годы и различными учреждениями. В этих таблицах различен порядок, в котором расположены друг за другом символы кирилличного алфавита, поэтому одному и тому же коду соответствуют разные символы. По этой причине, мы иногда сталкиваемся с текстами, которые состоят из русских букв, но в бессмысленной для нас последовательности.
Например, текст “Компьютерные вирусы”,
введенный в кодировке Windows-1251 в кодировке КОИ-8
будет отображен так: ”лПНРШАФЕТОШЕ ЧЙТХУЩ”.
Таблица 9.
Несоответствие кодов символов в различных кодировках кириллицы.
Код |
Windows-1251 |
КОИ-8 |
ISO |
Под национальные кодировки отданы коды с 128-го по 255-й.
|
192 |
А |
ю |
Р |
|
193 |
Б |
а |
С |
|
194 |
В |
б |
Т |
Эта проблема разрешима — на каждом компьютере найдутся все основные кодировочные таблицы, и если тест выглядит неадекватно, нужно попробовать перекодировать его, просто указав использовать другую кодировочную таблицу. Но наличие такой проблемы, конечно, вносит неудобства.
Используя 8-битную кодировочную таблицу мы не сможем адекватно увидеть на мониторе и тексты, созданные на тех языках, где используются символы, отличные от латинских и кирилличных, например символы с умляутами в немецком языке.
<<Назад | Содержание | Далее>>
Systo.ru — Простые типы данных
Формат представления байта показан на рисунке 1. Старший значащий бит еще называют MSB, а младший LSB. Рисунок знакового байта может вызвать вопросы. Дело в том, что старшим значащим битом, в этом случае, все равно является самый левый бит, а у нас показан второй слева. Дело в том, что с точки зрения программиста в знаковом байте, для представления числа можно использовать не 8, а только 7 разрядов. Поэтому, с точки зрения программиста, старшим значащим битом является именно показанный. Восьмой же бит является знаковым, т.е. индицирует знак хранимого в байте числа. Единичное значение этого разряда, обычно, соответствует отрицательному числу, а нулевое — положительному.
Для представления отрицательных чисел может использоваться два метода. Первый — знаковый бит используется для индикации знака, остальные разряды для представления числа в прямом коде. Второй — знаковый бит используется для индикации знака, остальные разряды для представления числа в дополнительном коде. На первый взгляд, различие не большое. Однако давайте рассмотрим два числа, 00000000 и 10000000. Если отрицательные числа хранятся в прямом коде, то оба эти числа являются 0. Но! Первое это положительный 0, второе отрицательный! Эту проблему вы возможно уже встречали, по крайней мере в старых книгах по вычислительной технике. Но это не единственная проблема прямого представления отрицательных чисел. Попробуем сложить плюс 1 и минус 1, 00000001 + 10000001. Простое сложение даст 10000010, а это отнюдь не 0. Значит нужна коррекция результата, а это удорожает оборудование. Поэтому в современных процессорах, за редким исключением, отрицательные числа представлены в дополнительном коде. В дополнительном коде отрицательное число представляется как число, которое надо прибавить к хранящемуся для получения в результате 0. Звучит туманно? На самом деле все просто, возьмем число 11111111, для получения 0, к этому числу надо прибавить 1. При этом произойдет перенос из старшего разряда и получится 00000000. Следовательно, 11111111 это -1. Вообще, смена знака числа в дополнительном коде выполняется так: исходное число инвертируется и к результату прибавляется единица. Нет никаких сложностей и со сложением, 11111111 + 00000001 = 00000000. Не требуется усложнение оборудования.
Храниться в машинной памяти, и передаваться по последовательным каналам связи, байт может как со стороны старшего бита, так и со стороны младшего. Однако, во всех современных процессорах младший бит расположен справа, а старший слева.
Теперь о диапазоне значений чисел, хранящихся в байтах. Беззнаковый байт позволяет хранить числа от 0 до 255. Байт со знаком позволяет хранить числа от -128 до +127.
Операции с байтами
Операций с байтами гораздо больше, чем операций с битами. Не будем рассматривать операции возведения в степень, извлечение корня, тригонометрические операции и тому подобное. Дело в том, что все эти операции, в конечном итоге, распадаются на простые арифметические операции и сдвиги. Интересующихся подробностями отсылаю к книгам по математике и численным методам.
Операция ИНВЕРСИИ БАЙТА (NOT). По другому это называется операция ОТРИЦАНИЯ (НЕ). Над каждым битом байта выполняется операция НЕ. Следует заметить, что эта операция не является операцией смены знака числа, хотя и меняет значение знакового разряда. Знак числа (знакового байта) меняется операцией двоичного дополнения. Если вы не можете уловить разницу, прочтите еще раз повнимательней параграф о форматах представления отрицательных чисел. Фактически, данная операция недопустима для знаковых чисел с точки зрения семантики.
Операция ДВОИЧНОЕ ДОПОЛНЕНИЕ (NEG) меняет знак числа. По другому это называется ИНВЕРСИЯ (СМЕНА) знака. Делается это просто: выполняется инверсия байта, а затем к байту прибавляется единица. Еще раз обращаю Ваше внимание на различие этих двух операций, дополнения и инверсии. Как показывает практика, это является камнем преткновения для многих. Инверсия имеет смысл для беззнаковых байтов, а дополнение меняет знак числа хранящегося в знаковом байте. Фактически, данная операция недопустима для беззнаковых чисел с точки зрения семантики.
Операция ПОРАЗРЯДНОГО ЛОГИЧЕСКОГО И (AND) выполняется над двумя байтами. Результатом операции является байт, в котором каждый бит является результатом операции И соответствующих бит исходных байтов. Операция имеет смысл для беззнаковых байтов. Точнее, процессору все равно, знаковый или беззнаковый байт участвует в операции, но Вам, как программистам, это явно не все равно.
01100100 AND 10011101 = 00000100 Операция ПОРАЗРЯДНОГО ЛОГИЧЕСКОГО ИЛИ (OR) выполняется над двумя байтами. Аналогична операции И, за исключением того, что над битами выполняется операция ИЛИ. Имеет смысл для беззнаковых байтов.
01100100 OR 10011101 = 11111101 Операция ПОРАЗРЯДНОГО ИСКЛЮЧАЮЩЕГО ИЛИ (XOR) выполняется над двумя байтами. Аналогична операции И, за исключением того, что над битами выполняется операция ИСКЛЮЧАЮЩЕГО ИЛИ. Имеет смысл для беззнаковых байтов.
01100100 XOR 10011101 = 11111001 Операция СЛОЖЕНИЯ (ADD) выполняется над двумя байтами. Сложение выполняется точно так же, как мы складываем десятичные числа, начиная с младшего разряда и заканчивая старшим. Точно так же выполняются и межразрядные переносы. Правила сложения бит я уже описывал выше. Однако, в отличии от привычной нам всем математики, где количество цифр в получившейся сумме нам, в общем и целом, безразлично, при сложении байтов дело обстоит не так просто. Речь идет о ситуации, когда число разрядов в результате операции превышает размер байта. В нашем случае, это более 8 бит для байта без знака, и более 7 бит для байта со знаком. Тут то и появляются термины перенос и переполнение. Термин перенос Вам уже знаком из операции сложения бит. Для индикации этих ситуаций, в слове состояния процессора, обычно предусматриваются специальные биты. Бит индицирующий перенос, обычно, обозначается С или CF, а переполнение О или OF. Попробуем разобраться поподробнее. Рассмотрим, обещанный ранее, пример сложения двух беззнаковых байт:
Как видно, результат занимает 9 бит. Этот девятый бит, не помещающийся в байте, как ранее неявный дополнительный бит, не помещающийся в бите, и называется переносом. Считать ли данную ситуацию ошибочной? И да и нет. Если результат должен помещаться в байт, то это безусловно ошибка. Если же это часть операции сложения многобайтных чисел, то ошибки нет. Перенос, как результат сложения, имеет точно такое же значение, что и поразрядные переносы при выполнении десятичного сложения. Он не является признаком ошибки и используется при организации сложения многобайтных чисел. Итак, термин перенос имеет смысл для беззнаковых байт. Он не является ошибкой при сложении двух байт, являющихся частью многобайтных чисел. В противном случае он сигнализирует об ошибке.
Теперь разберемся с переполнением. Рассмотрим пример сложения знаковых байт.
На первый взгляд все в порядке. В результате 8 разрядов, следовательно он помещается в байт. Но вспомним, мы складываем знаковые байты. У нас же, при сложении двух положительных чисел, получился отрицательный результат! Переполнение возникает, когда при сложении двух знаковых байт, имеющих одинаковый знак, результат сложения имеет другой знак. Иногда переполнение можно игнорировать, но в большинстве случаев это свидетельствует об ошибке. По научному, условие формирования переполнения звучит так: количество переносов в знаковый разряд не равно количеству переносов из знакового разряда. Итак, термин переполнение имеет смысл для знаковых байт. В большинстве случаев это свидетельствует об ошибке.
Операция ВЫЧИТАНИЯ (SUB) выполняется над двумя байтами. Как и операция сложения, операция вычитания очень похожа на вычитание обычных десятичных чисел. Точно так же, как и при обычном вычитании, формируются межразрядные заемы. Правила вычитания для бит я уже описывал ранее. Как и в операции сложения, могут быть сформированы признаки заема, как результата операции, и переполнения. Научная формулировка условия формирования переполнения звучит точно так же, как и для сложения. А вот как сказать это более человеческим языком, я оставляю Вам в качестве упражнения.
Поскольку я так много и подробно написал про сложение, буду кратким. Собственно, вычитание реализуется очень просто. У вычитаемого меняется знак, для чего выполняется операция NEG. Затем выполняется сложение. Это чуть медленее, чем просто вычитание, но не требует усложнения процессора. При вычитании, вместо термина перенос, применяется термин заем. Термин переполнение сохраняет свое значение. Теперь небольшой пример:
Операция ИНКРЕМЕНТА (INC). Просто увеличение байта на 1. Это настолько частая операция, что во всех современных процессорах для нее имеется специальная команда.
Операция ДЕКРЕМЕНТА (DEC). Просто уменьшение байта на 1. Это настолько частая операция, что во всех современных процессорах для нее имеется специальная команда.
Операция УМНОЖЕНИЯ (MUL) выполняется над двумя байтами. Аналогична операции умножения десятичных чисел. Правила умножения бит я уже давал ранее, при описании бит.
Однако, умножение, как и деление впрочем, имеет несколько особенностей. Первая, это то, что умножение (и деление) бывает знаковым и беззнаковым. Как Вы уже наверно догадались, при выполнении знакового умножения знаковые биты перемножаемых байт не участвуют в операции собственно умножения, а определяют знак результата. В операции беззнакового умножения участвуют, на равных, все биты перемножаемых байт. Второе отличие — результат умножения имеет в два раза больше бит, чем сомножители. То есть при умножении двух восьмибитных байт результат будет иметь 16 бит. Приведу пример:
Самый левый бит, пятнадцатый, в нашем случае равен 0. Может возникнуть вопрос, зачем тогда его показывать? Вспомним сложение. Этот бит может запросто оказаться не нулевым в результате переноса. Итак, в результате умножения двух однобайтных сомножителей мы получили два байта, которые можно назвать словом или полусловом. Но эти термины мы обсудим позже. А сейчас попытаемся разобраться с переполнением и переносом при умножении.
При обсуждении переноса и переполнения при умножении я должен сделать одну очень важную оговорку. Речь будет идти о процессорах INTEL 80х86 и AMD. Дело в том, что установка признаков результата, и даже количество бит в результате (8 или 16), очень сильно зависит от конкретного процессора. В процессорах Intel 80х86, при умножении двух байт, будет получаться 16-ти разрядный результат, который состоит из двух половин, младшей и старшей. Для нашего примера младшая половина 01110010, а старшая 00110110. Для беззнакового умножения признаки CF и OF будут устанавливаться, если старшая половина результата не нулевая. Для знакового умножения признаки CF и OF будут установлены, если старшая половина результата не равна 00000000 или 11111111. Почему такое странное условие для знакового умножения? Наберитесь терпения, это будет понятно из описания операции деления. Считать ли установку признаков переноса и переполнения ошибкой? Да, если результат должен помещаться в байте. В противном случае это просто говорит о том, что старшая половина результата содержит значащие разряды.
Операция ДЕЛЕНИЯ (DIV) выполняется над двумя байтами. Как и все ранее рассмотренные операции, деление байт аналогично привычному делению десятичных чисел. Основное отличие состоит в том, что делимое должно занимать два байта, а не один. Что же делать, если нужно разделить именно байт? Если делимое беззнаковый байт, то его размещают на месте младшей половины делимого, а в старшую заносят 0. Если делимое знаковый байт, то выполняют расширение знака. Для этого в старшую половину делимого заносят 00000000, если делимое положительно, или 11111111, если делимое отрицательно. То есть, устанавливают все биты старшей половины делимого равными значению знакового бита младшей половины делимого. Вспомните условие формирования признаков CF и OF при выполнении знакового умножения, теперь оно должно быть понятным для Вас. Как и умножение, деление может быть знаковым и беззнаковым. Приведу пример:
Обратите внимание, что результат деления занимает 9 бит. Правда девятый бит нулевой, и это важно. При реализации операции деления разработчики процессоров Intel 80х86 отошли от привычной схемы формирования признаков результата. После выполнения деления ни призак CF, ни признак OF не имеют смысла и могут принимать любое значение. Если результат деления двух байт не помещается в байт, то есть, если в результате есть ненулевые биты, кроме младших восьми, то выполняется прерывание. Прерывания будут описаны в отдельной статье, сейчас Вам просто надо запомнить, что после операции деления признаки результата не определены, что вызывает дополнительные сложности.
Теперь обратим внимание, что наше делимое не поделилось на делитель нацело. В остатке 100. Это обычное явление. Как и в привычной всем десятичной арифметике, результатом деления являются частное и остаток. При этом, никаких признаков не нулевого остатка не формируется. Вы должны проверять это сами.
В некоторых языках программирования кроме деления «/» есть операция получения остатка от деления «%» (взятия по модулю). Как видно, одной машинной командой, если процессор поддерживает операцию деления, мы можем получить и частное, и остаток. Компиляторы с языков программирования далеко не всегда пользуются этой возможностью.
Операции ЛОГИЧЕСКОГО СДВИГА ВПРАВО (SHR) и ЛОГИЧЕСКОГО СДВИГА ВЛЕВО (SHL). Имеют смысл для беззнаковых байт. При этом сдвиг влево, фактически, выполняет умножение на 2, а сдвиг вправо, деление на 2 (с отбрасыванием остатка).
Так из байта 01101001 (десятичное 105), в результате логического сдвига вправо, получится байт 00110100 (десятичное 52), а в результате сдвига влево 11010010 (десятичное 210). Обратите внимание на необычное использование признака CF, он содержит значение последнего выдвигаемого бита. Именно последнего, поскольку сдвиг может выполняться не на один бит, или по другому разряд, а сразу на несколько. Кстати, признаки результата, в частности CF, по другому называются флажками.
Операции АРИФМЕТИЧЕСКОГО СДВИГА ВПРАВО (SAR) и АРИФМЕТИЧЕСКОГО СДВИГА ВЛЕВО (SAL). Имеют смысл для знаковых байт. Аналогичны операциям логических сдвигов, за исключением сохранения знака байта при сдвиге вправо. Логический и арифметический сдвиги влево полностью идентичны.
Обратите внимание, что при сдвиге вправо знаковый бит дублируется. Это позволяет сохранять знак байта. Как и в операциях логических сдвигов флажек CF принимает значение последнего выдвинутого байта.
Операции ЦИКЛИЧЕСКОГО СДВИГА ВПРАВО (ROR), ЦИКЛИЧЕСКОГО СДВИГА ВЛЕВО (ROL), ЦИКЛИЧЕСКОГО СДВИГА ВПРАВО ЧЕРЕЗ ПЕРЕНОС (RCR), ЦИКЛИЧЕСКОГО СДВИГА ВЛЕВО ЧЕРЕЗ ПЕРЕНОС (RCL). Имеют смысл для беззнаковых байт.
Особенно комментировать эти операции не буду. Обращаю Ваше внимание только на использование флажка CF в операциях.
Операции логических и циклических сдвигов в основном используются при обработке графики, при шифровании, при распределении памяти и дискового пространства и других специфических приложениях. Операции арифметических сдвигов часто используются для замены операций умножения или деления на степени двойки, поскольку выполняются быстрее операций умножения и деления.
Теперь посмотрим, как байты размещаются в машинной памяти и как процессор получает к ним доступ. Практически во всех современных процессорах каждый байт имеет свой адрес и доступен непосредственно. При этом операция получения адреса байтовой переменной допустима, а к самим байтам возможна косвенная адресация. Однако надо учитывать, что в некоторых процессорах доступ к байтам начинающимся не на границе слова (двойного слова, и так далее) может быть более медленным. Это описывается в технической документации на процессор.
Слово. Полуслово. Двойное слово.
Если набор бит называется байтом, то как называется набор байт? Словом. Если байт может состоять из разного количества бит, то как обстоят дела со словами? Так же. Количество байт в слове зависит от типа процессора. В шестнадцатиразрядных процессорах слово состоит из двух байт. В тридцати двух разрядных процессорах слово состоит из четырех байт. Двойное слово, как и следует из названия, содержит ровно в два раза больше байт, чем просто слово. Встает вопрос, как тогда называется набор из двух байт для тридцати двух разрядного процессора? От специалистов, пришедших в мир персональных компьютеров с больших ЭВМ, можно услышать термин — полуслово (сейчас этот термин употребляется редко). Теперь перейду к конкретному типу процессора — 80х86. Как Вы знаете, младшие модели этих процессоров были 16-разрядными, а начиная с 80386 стали 32-разрядными. Несмотря на это, фирма Intel сохранила терминологию 16-разрядных моделей. В официальной документации на процессоры Intel словом, или коротким словом, называется набор из 2 байт, то есть 16 разрядов. Это верно даже для Pentium. Набор из 4 байт, или 32 разряда, называется двойным словом, или длинным словом. Очевидно, что это сделано для единства терминологии, независимо от конкретной модели. Хотя вопрос спорный.
Формат длинного слова (с точки зрения Intel) показан на рисунке 5. Для представления отрицательных чисел используется дополнительный код, как и в случае байта. Теперь рассмотрим порядок байт в слове, а точнее, порядок байт в слове, хранящемся в оперативной памяти. Суть вот в чем. Процессор, а следовательно и написанная Вами программа, может получить доступ как к слову в целом, так и к каждому из составляющих его байт в отдельности. Сразу возникают вопросы. Адрес какого байта, составляющего слово, будет считаться адресом слова? Если известен адрес слова, то какой адрес будет, например, у младшего или старшего байта? В оющем случае, это зависит от типа процессора. Например длинное слово 14AFB820, состоящее из 4 байт, может храниться в таком порядке: 20, B8, AF, 14. А может и в таком: 14, AF, B8, 20. Это имеет значение, если Вам надо, например, преобразовать длинное слово в два коротких, или наоборот. Это имеет значение, если Вам надо обмениваться информацией с компьютерами, собранными на процессоре другого типа, например PC и Mac, PC и ЕС ЭВМ, PC и специализированный вычислитель. В процессорах Intel слова хранятся в памяти начиная с младшего байта, и за адрес слова принимается адрес младшего байта. То есть короткое слово 53C6 в памяти хранится так: С6, 53. А длинное слово 14AFB820 так: 20, B8, AF, 14.
В беззнаковом слове можно хранить числа от 0 до 65535, в двойном слове от 0 до 4294967295. В слове со знаком можно хранить числа от -32768 до 32767, в двойном слове от -2147483648 до 2147483647.
Операции со словами.
Все операции, которые можно выполнять над байтами, применимы и к словам. Однако существуют операции, которые трудно отнести к конкретному формату данных. Это операции преобразования байта в слово, слова в двойное слово, и им подобные. Я рассмотрю здесь только эти операции.
Операции ПРЕОБРАЗОВАНИЯ БАЙТА В СЛОВО, СЛОВА В ДВОЙНОЕ СЛОВО, ДВОЙНОГО СЛОВА В СЛОВО, СЛОВА В БАЙТ. Преобразование байта в слово мы уже рассматривали, когда разбирались с делением байт. Там же было упомянуто другое название этой операции — расширение знака. Преобразуемый байт помещается на место младшего байта слова, каждый бит старшего байта слова принимает значение знакового бита преобразуемого байта. Проще это звучит так, в старший байт слова заносится 11111111 если в исходном байте хранится отрицательное число, и 00000000, если положительное. Абсолютно так же выполняется операция преобразования слова в двойное слово, только знаковый бит в этом случае распространяется на старшее слово. Заметим, что расширение знака имеет смысл только для знаковых данных. Для беззнаковых достаточно заполнить старшый байт или слово нулями. В процессорах Intel 80х86 для этих операций есть специальные команды.
Преобразование слова в байт выполняется отбрасыванием старшего байта. Для беззнаковых данных, условием корректности операции является равенство старшего байта 0. Для знаковых данных, все биты старшего байта и знаковый бит младшего должны иметь одинаковое значение, иначе изменится знак результата. Преобразование двойного слова в слово выполняется аналогично.
Что можно сказать о хранении слов памяти? В некоторых процессорах разрешено размещение слов с любого адреса, даже нечетного (младший бит адреса не равен 0). Для процессоров с разрядностью больше 16 более точно сказать, что адрес не кратен размеру слова. Например, для 32 разрядного процессора таким «нечетным/некратным» адресом будет адрес, у которого два младших бита не 0. Такими процессорами являются процессоры 80×86. Однако, при размещении слов по кратным адресам обращения к памяти будут более эффективны и программа будет выполняться чуть быстрее. Некоторые процессоры, например процессоры DEC PDP (отечественная серия СМ ЭВМ, Электроника-60, ДВК) при обращении к слову по нечетному адресу генерируют ошибку.
Числа с плавающей запятой
Числа с плавающей запятой, или вещественные числа, широко используются в повседневной практике. Однако в компьютерных программа х их долгое время старались не применять. И сегодня, в критичных по времени выполнения частях программ, вместо чисел с плавающей запятой применяют целые числа. Причина в том, что операции с плавающей точкой выполняются гораздо медленнее, чем операции с байтами и словами. Другой причиной является то, что числа с плавающей точкой обеспечивают лишь приближенное представление. Это сказывается, например, на финансовых программах. Несмотря на высокую точность представления чисел с плавающей запятой в современных процессорах, длинная цепочка вычислений может привести к погрешности не только в последнем разряде, но и в тысячных, и даже в десятых долях. Особенно, если в операции участвуют числа с большей разницей в порядках (потеря точности).
Как видно, число с плавающей запятой (или точкой), состоит из мантиссы и порядка. Рассмотрим число 24324,43534. Его можно представить, в так называемой научной нотации, как 2,432443534·104. Здесь мантисса 2,432443534, а порядок 4. В общем виде число с плавающей запятой можно представить так:
[+|-]d0,d1d2d3…dn·10[+|-]dp
Здесь [+|-] обозначает необязательный знак числа или порядка. di> это десятичная цифра (от 0 до 9), причем d0 обязательно должна быть не равна 0, естественно, если само число не 0. dp> это десятичный порядок, который тоже состоит из цифр от 0 до 9. Для двоичных чисел общий вид будет таким же, за маленьким исключением:
[+|-]b0,b1b2b3…bn·2[+|-]bp
Здесь bi это двоичная цифра (0 или 1), причем b0 обязательно должна быть 1. bp это двоичный порядок, состоящий из двоичных цифр. Обратите внимание, что для двоичного числа с плавающей запятой порядок это степень двойки, а не 10.
Я буду рассматривать формат чисел с плавающей запятой только применительно к процессорам Intel 80х86. А вот операции с этими числами описываются обычными математическими правилами и не зависят от типа процессора. Итак, в процессорах Intel, числа с плавающей запятой могут хранится в трех форматах: одинарной точности, двойной точности и расширенной точности. Основное отличие этих форматов заключается в количестве бит, отводимых под мантиссу и порядок. Для чисел одинарной точности мантисса занимает 24 бита, а порядок 8. Для двойной точности, мантисса 53 бита, порядок 11 бит. Для расширенной точности, мантисса 64 бита, порядок 15 бит. Знаковый бит как всегда определяет знак числа, однако мантисса хранится не в дополнительном, а в прямом коде. Следовательно возможно появление двух нулей, положительного и отрицательно, +0 и -0. Порядок не только не выровнен на границу байта, но и хранится в экзотическом, смещенном, виде:
хранимый порядок = истинный порядок + смещение
Значение смещения для соответствующих форматов, в десятичном эквиваленте, равно +127, +1023, +16383, или в двоичном виде 1111111, 1111111111, 11111111111111. Приведу примеры, для облегчения понимания, в десятичном виде и для чисел одинарной точности. Порядок -6 будет храниться как 121, а +17 как 144.
Мантисса тоже хранится достаточно хитро. Для начала посчитаем: один бит знаковый, 8 бит порядок, 24 бита мантисса, итого 33 бита! Как же так, ведь двойное слово занимает только 32 бита? Вспомним общий вид двоичного числа с плавающей запятой, точнее то, что b0 обязательно должна равняться 1. Раз одна из цифр числа всегда известна, то зачем ее хранить? Вот и получается, что хранятся только 23 бита из 24, 52 из 53. Для чисел расширенной точности сделано исключение — хранятся все цифры числа, даже b0. Говоря другими словами, в форматах одинарной и двойной точности мантисса хранится со скрытым битом. Теперь о десятичной, извиняюсь, двоичной точке. Эта точка не хранится! Мантисса хранится как целое число. Например мантисса 1.10101010111110011101001 в результате всех преобразований будет храниться как 10101010111110011101001.
Почему же для расширенного формата сделано исключение? Во первых, это нестандартный формат, он присутствует только в процессорах Intel. Во вторых, числа внутри процессора хранятся и обрабатываются именно в этом формате. При загрузке числа из памяти, или при сохранении в память, выполняются необходимые преобразования. Собственно все дело именно в использовании этого формата для выполнения операций внутри процессора. Хранение мантиссы со скрытым битом не позволяет представлять не нормализованные числа, а результат операции может оказаться как раз не нормализованным. Расширенный формат позволяет представлять такие числа благодаря хранению всех разрядов.
Понятие нормализованного числа известно из математики. Приведенные выше общие виды десятичных и двоичных чисел описывают именно нормализованные числа. Однако результат операции над двумя нормализованными числами может оказаться не нормализованным. В этом случае процессор выполняет процедуру нормализации, которая сводится к сдвигу двоичной точки в соответствующую позицию и корректировке порядка. Например сдвиг двоичной точки на один разряд влево вызывает увеличение порядка на 1.
Операции над числами с плавающей точкой
В компьютерах с процессорами Intel 80х86, операции над числами с плавающей запятой выполняет так называемый сопроцессор 80х87. Раньше сопроцессор был отдельной микросхемой и устанавливался далеко не всегда. Сейчас он входит в состав собственно процессора. Этот сопроцессор имеет команды для арифметических операций, тригонометрических операций, извлечения корня, преобразований форматов чисел, служебные команды. Все операции выполняются по стандартным математическим правилам, поэтому я рассмотрю только четыре арифметических действия, причем в их десятичном эквиваленте.
СЛОЖЕНИЕ и ВЫЧИТАНИЕ. Вы можете сложить или вычесть два любых числа. Процессор сам выполнит приведение порядков. Например 1,34·104 + 1,2·102 = 1,34·104 + 0,012·104 = 1,352·104.
УМНОЖЕНИЕ и ДЕЛЕНИЕ. Выполняются по широко известным правилам: при умножении, мантиссы перемножаются, а порядки складываются, при делении, мантиссы делятся, а порядки вычитаются. Например: 1,34·104 · 1,2·102 = 1,608·106
Теперь Вы знаете многое о машинных форматах данных. Однако, есть еще специализированные процессоры, оперирующие комплексными числами, сигнальные процессоры для обработки аналоговых сигналов и построения цифровых фильтров. У них свои форматы данных. Существуют еще упакованные и зонные форматы. Их используют для вычислений высокой и сверхвысокой точности. Есть специальные форматы данных для команд MMX и 3D Now!. Есть формат представления данных в видеопамяти, причем зависящий от типа графического процессора. Некоторых из этих форматов я коснусь чуть дальше или в отдельных статьях. В любом случае, для Вас сейчас не должно составить труда разобраться с любым, самым экзотическим форматом.
Представление простых типов данных языков программирования
Разные языки программирования позволяют использовать разные типы данных. Одни и те же машинные форматы в разных языках называются по разному. Однако, если не принимать во внимание сильно специфические языки, вроде Lisp или APL, то окажется, что все не так безнадежно. Сразу оговорюсь, что не рассматриваю случаи, когда переменная может хранить данные разных типов (такое возможно, напрмиер, в JS или Python). Но если говорить максимально упрощенно, то и там переменные в итоге хранятся так, как здесь описано. Просто дополнительно хранится информация о том, какой тип данных собственно сейчас хранит переменная и где искать в памяти сами данные.
Биты. В языках программирования для больших ЭВМ (сегодня, включая и персональные ЭВМ и, даже, смартфоны) этот тип данных, обычно, не представлен. А вот для микроконтроллеров используется часто. Занимает, действительно, один бит. Но этот бит, обычно, является составной частью байта или слова. При этом на такие переменные накладываются дополнительные ограничения. Исключений мало, например, семейство MCS-51. Компилятор языка высокого уровня может сам распределять такие переменные по байтам или оставить это в зоне ответственности программиста.
Символы (char, unsigned char, character). Казалось бы, что может быть проще? Но давайте заглянем внутрь. Начнем с того, что один алфавитно-цифровой символ совсем не обязательно занимает один байт. Причина кроется в необходимости поддерживать несколько национальных алфавитов, причем некоторые, например китайский, содержат куда больше 255 символов, которые можно представить одним байтом. Кроме однобайтовых кодовых таблиц, таких как CP866, Windows-1251, koi8-r, существуют кодовые таблицы с символами переменной длины. Вы наверно встречали аббревиатуры DBCS, набор двухбайтных символов, или MBCS, набор многобайтных символов. Это кодовые таблицы символов переменной длины. Работа с такими символами не удобна и медленна. Поэтому была сделана попытка ввести международный стандарт. На роль такого стандарта была выдвинута кодировка UNICODE. Фактически, это многобайтные (иногда и переменной длины, как в UTF-8) символы, но их формат стандартизован. Алфавитно-цифровые символы, или просто символы, как бы они не назывались в различных языках, часто хранятся в байте. При чем в некоторых языках, например в С, даже различают знаковые и беззнаковые символы. Кодировка Unicode требует для хранения символа нескольких байт. Строки символов, в некоторых языках они относятся к встроенным типам данных, обычно хранят в виде цепочек байт. Но тут возможны варианты. Строка может храниться с завершающим нулевым байтом (как в С) или с байтом (словом) длинны строки вначале (как в Pascal).
Целые числа (int, integer, long, short, unsigned int, unsigned long, unsigned short). Могут быть представлены байтом, словом, двойным словом. Это зависит от транслятора. В верси
какие чаще всего используются и как рассчитываются байты, биты и мегабайты
Из этой статьи вы узнаете, сколько бит в одном байте, килобайте, мегабайте, гигабайте, терабайте.
Если вы имели дело с носителем информации, то наверняка слышали про биты, байты, мегабайты, гигабайты или терабайты. Но не все люди знают, как связаны между собой эти единицы измерения. Об этом известно профессионалам в области IT-технологий и просто продвинутым людям, которые знакомы с цифровой информацией.
Мы привыкли исчислять величины десятичными системами исчисления, и если есть приставка «кило», значит, нужно умножать на тысячу. Но при измерении цифровой информации существует другая система исчисления.
Итак, сколько бит в байте, килобайте, мегабайте, гигабайте, терабайте? Но для начала стоит разобраться, что это такое бит или байт и другие единицы измерения.
Часто пользователи задаются вопросом: что больше: килобайт или мегабайт, или гигабайт, или терабайт?
Из вышеприведенной информации видно, что самый большой объем памяти исчисляется в терабайтах, а самый маленький в битах.
Таблица перевода байтов в килобайты, мегабайты, гигабайты или терабайты наиболее удобна для восприятия.
Теперь вы знаете, что мегабайт больше килобайта, но меньше гигабайта. Самая большая единица измерения — это терабайт.
В настоящее время специалистам IT известны и другие единицы измерения такие, как петабайт, эксабайт, зеттабайт и йоттабайт. Но наиболее популярны для измерения памяти именно биты, байты, кило-, мега- , гига- и терабайты.
Если под рукой есть таблица перевода больших единиц в меньшие, то просто вычислить, чему будет равен, например, 2 мегабайта или гигабайта. Точный результат конвертирования:
- 1 МБ = 8388608 битам
- 1 ГБ = 8589934592 битам
- 2 МБ = 16777216 битам
- 2 ГБ = 17179869184 битам
Еще один распространенный вопрос среди пользователей глобальной сети: что больше мегабайт или гигабайт для интернета? Чаще именно гигабайт используется для измерения количества информации в интернете. Чтобы понять, что больше, нужно обратиться к цифрам. Гигабайт больше мегабайта и равен 1024 МБ.
Если вы не можете понять, какая единица измерения больше, а какая меньше, вспомните метры и сантиметры. В одном метре 100 см, так же как и в гигабайтах определенное количество мегабайтов, но не сто, а намного больше.
Видео: 08 бит байт системы счисления
Многие пользователи сталкивались с не слишком приятной ситуацией: вы покупаете жесткий диск объемом, к примеру, 500 гигабайт, подключаете его к компьютеру и обнаруживаете, что доступно около 480 гигабайт. А все потому, что производители жестких дисков считают, что в гигабайте 1000 мегабайт, а ОС Windows уверена, что 1024. Кто прав?
Основная загвоздка состоит в том, что количество информации может измеряться как в двоичной, так и в десятичной системе . Кроме того, существуют различные стандарты единиц измерения количества информации. Это и вызывает путаницу и мешает точно определить, сколько мегабайт в гигабайте.
Вообще-то, приставки «кило-», «мега-», «гига-» и т. п. используются в Международной системе единиц (СИ) и обозначают степени числа десять. Поэтому, если рассуждать логически, в одном гигабайте должно быть 1000 мегабайт. Однако почему тогда ваша операционная система уверена, что их там 1024?
Дело в том, что разработчики многих современных операционных систем пользуются стандартом памяти JEDEC 100B.01 (стандарт Объединенного инженерного совета по электронным устройствам), согласно которому принятые в системе СИ приставки могут обозначать не степень десятки, а степень двойки (т. е.
APIENTRY | Соглашение о вызовах системных функций. Этот тип объявлен в WinDef.h следующим образом: #define APIENTRY WINAPI | ||
АТОМ | Атом. Для получения дополнительной информации см. О таблицах Atom. Этот тип объявлен в WinDef.h следующим образом: typedef WORD ATOM; | ||
BOOL | Логическая переменная (должно быть ИСТИНА или ЛОЖЬ ). Этот тип объявлен в WinDef.h следующим образом: typedef int BOOL; | ||
BOOLEAN | Логическая переменная (должно быть ИСТИНА или ЛОЖЬ ). Этот тип объявлен в WinNT.h следующим образом: typedef BYTE BOOLEAN; | ||
БАЙТ | Байт (8 бит). Этот тип объявлен в WinDef.h следующим образом: typedef unsigned char BYTE; | ||
ЗВОНОК | Соглашение о вызовах для функций обратного вызова. Этот тип объявлен в WinDef.h следующим образом: #define CALLBACK __stdcall CALLBACK , WINAPI и APIENTRY используются для определения функций с соглашением о вызовах __stdcall. Большинство функций в Windows API объявлено с использованием WINAPI . Вы можете использовать CALLBACK для функций обратного вызова, которые вы реализуете, чтобы помочь идентифицировать функцию как функцию обратного вызова. | ||
CCHAR | 8-битный символ Windows (ANSI). Этот тип объявлен в WinNT.h следующим образом: typedef char CCHAR; | ||
СИМВОЛ | 8-битный символ Windows (ANSI). Для получения дополнительной информации см. Наборы символов, используемые шрифтами. Этот тип объявлен в WinNT.h следующим образом: typedef char CHAR; | ||
COLORREF | Значение цвета красный, зеленый, синий (RGB) (32 бита). См. COLORREF для получения информации об этом типе. Этот тип объявлен в WinDef.h следующим образом: typedef DWORD COLORREF; | ||
CONST | Переменная, значение которой должно оставаться постоянным во время выполнения. Этот тип объявлен в WinDef.h следующим образом: #define CONST const | ||
DWORD | 32-разрядное целое число без знака. Диапазон значений — от 0 до 4294967295 в десятичной системе. Этот тип объявлен в IntSafe.h следующим образом: typedef unsigned long DWORD; | ||
DWORDLONG | 64-разрядное целое число без знака.Диапазон значений: от 0 до 18446744073709551615 в десятичной системе. Этот тип объявлен в IntSafe.h следующим образом: typedef unsigned __int64 DWORDLONG; | ||
DWORD_PTR | Длинный тип без знака для точности указателя. Используется при приведении указателя к длинному типу для выполнения арифметики указателя. (Также обычно используется для общих 32-битных параметров, которые были расширены до 64-битных в 64-битной Windows.) Этот тип объявлен в BaseTsd.h следующим образом: typedef ULONG_PTR DWORD_PTR; | ||
DWORD32 | 32-разрядное целое число без знака. Этот тип объявлен в BaseTsd.h следующим образом: typedef unsigned int DWORD32; | ||
DWORD64 | 64-разрядное целое число без знака. Этот тип объявлен в BaseTsd.h следующим образом: typedef unsigned __int64 DWORD64; | ||
ПОПЛАВОК | Переменная с плавающей запятой. Этот тип объявлен в WinDef.h следующим образом: typedef float FLOAT; | ||
HACCEL | Дескриптор таблицы ускорителя. Этот тип объявлен в WinDef.h следующим образом: typedef HANDLE HACCEL; | ||
HALF_PTR | В два раза меньше указателя. Используйте в структуре, содержащей указатель и два небольших поля. Этот тип объявлен в BaseTsd.h следующим образом:
| ||
РУЧКА | Дескриптор объекта. Этот тип объявлен в WinNT.h следующим образом: | ||
HBITMAP | Дескриптор растрового изображения. Этот тип объявлен в WinDef.h следующим образом: | ||
HBRUSH | Ручка для кисти. Этот тип объявлен в WinDef.h следующим образом: | ||
HCOLORSPACE | Дескриптор цветового пространства. Этот тип объявлен в WinDef.h следующим образом: | ||
HCONV | Дескриптор диалога динамического обмена данными (DDE). Этот тип объявлен в Ddeml.h следующим образом: | ||
HCONVLIST | Дескриптор списка диалогов DDE. Этот тип объявлен в Ddeml.h следующим образом: | ||
HCURSOR | Дескриптор курсора. Этот тип объявлен в WinDef.h следующим образом: | ||
HDC | Дескриптор контекста устройства (DC). Этот тип объявлен в WinDef.h следующим образом: | ||
HDDEDATA | Дескриптор данных DDE. Этот тип объявлен в Ddeml.h следующим образом: | ||
HDESK | Дескриптор рабочего стола. Этот тип объявлен в WinDef.h следующим образом: | ||
HDROP | Дескриптор внутренней капельной структуры. Этот тип объявлен в ShellApi.h следующим образом: | ||
HDWP | Дескриптор отложенной структуры позиции окна. Этот тип объявлен в WinUser.h следующим образом: | ||
HENHMETAFILE | Дескриптор расширенного метафайла. Этот тип объявлен в WinDef.h следующим образом: | ||
HFILE | Дескриптор файла, открытого OpenFile , а не CreateFile . Этот тип объявлен в WinDef.h следующим образом: | ||
HFONT | Дескриптор шрифта. Этот тип объявлен в WinDef.h следующим образом: | ||
HGDIOBJ | Дескриптор объекта GDI. Этот тип объявлен в WinDef.h следующим образом: | ||
HGLOBAL | Дескриптор глобального блока памяти. Этот тип объявлен в WinDef.h следующим образом: | ||
КРЮК | Ручка к крючку. Этот тип объявлен в WinDef.h следующим образом: | ||
HICON | Дескриптор значка. Этот тип объявлен в WinDef.h следующим образом: | ||
HINSTANCE | Дескриптор экземпляра.Это базовый адрес модуля в памяти. HMODULE и HINSTANCE сегодня одинаковы, но представляют разные вещи в 16-битной Windows. Этот тип объявлен в WinDef.h следующим образом: | ||
HKEY | Дескриптор раздела реестра. Этот тип объявлен в WinDef.h следующим образом: | ||
HKL | Идентификатор языка ввода. Этот тип объявлен в WinDef.h следующим образом: | ||
HLOCAL | Дескриптор блока локальной памяти. Этот тип объявлен в WinDef.h следующим образом: | ||
HMENU | Дескриптор меню. Этот тип объявлен в WinDef.h следующим образом: | ||
HMETAFILE | Дескриптор метафайла. Этот тип объявлен в WinDef.h следующим образом: | ||
HMODULE | Дескриптор модуля. Это базовый адрес модуля в памяти. HMODULE и HINSTANCE одинаковы в текущих версиях Windows, но представляют разные вещи в 16-битной Windows. Этот тип объявлен в WinDef.h следующим образом: | ||
HMONITOR | Дескриптор монитора. Этот тип объявлен в WinDef.h следующим образом: | ||
HPALETTE | Дескриптор палитры. Этот тип объявлен в WinDef.h следующим образом: | ||
HPEN | Ручка ручки. Этот тип объявлен в WinDef.h следующим образом: | ||
HRESULT | Коды возврата, используемые COM-интерфейсами.Для получения дополнительной информации см. Структура кодов ошибок COM. Чтобы проверить значение HRESULT , используйте макросы FAILED и SUCCEEDED . Этот тип объявлен в WinNT.h следующим образом: | ||
HRGN | Дескриптор региона. Этот тип объявлен в WinDef.h следующим образом: | ||
HRSRC | Дескриптор ресурса. Этот тип объявлен в WinDef.h следующим образом: | ||
HSZ | Дескриптор строки DDE. Этот тип объявлен в Ddeml.h следующим образом: | ||
HWINSTA | Ручка оконной станции. Этот тип объявлен в WinDef.h следующим образом: | ||
HWND | Дескриптор окна. Этот тип объявлен в WinDef.h следующим образом: | ||
ИНТ | 32-разрядное целое число со знаком. Диапазон значений: от -2147483648 до 2147483647 в десятичной системе. Этот тип объявлен в WinDef.h следующим образом: | ||
INT_PTR | Целочисленный тип со знаком для точности указателя. Используется при приведении указателя к целому числу для выполнения арифметики указателя. Этот тип объявлен в BaseTsd.h следующим образом:
| ||
INT8 | 8-битовое целое число со знаком. Этот тип объявлен в BaseTsd.h следующим образом: | ||
INT16 | 16-битовое целое число со знаком. Этот тип объявлен в BaseTsd.h следующим образом: | ||
INT32 | 32-разрядное целое число со знаком. Диапазон значений: от -2147483648 до 2147483647 в десятичной системе. Этот тип объявлен в BaseTsd.h следующим образом: | ||
INT64 | 64-разрядное целое число со знаком. Диапазон значений: от — 72036854775808 до 72036854775807 в десятичной системе. Этот тип объявлен в BaseTsd.h следующим образом: | ||
LANGID | Идентификатор языка. Для получения дополнительной информации см. Идентификаторы языков. Этот тип объявлен в WinNT.h следующим образом: | ||
LCID | Идентификатор языкового стандарта. Для получения дополнительной информации см. Идентификаторы языкового стандарта. Этот тип объявлен в WinNT.h следующим образом: | ||
LCTYPE | Тип информации о языковом стандарте. Список см. В разделе Константы информации о локали. Этот тип объявлен в WinNls.h следующим образом: | ||
LGRPID | Идентификатор языковой группы. Список см. В EnumLanguageGroupLocales . Этот тип объявлен в WinNls.h следующим образом: | ||
ДЛИННЫЙ | 32-разрядное целое число со знаком. Диапазон значений: от -2147483648 до 2147483647 в десятичной системе. Этот тип объявлен в WinNT.h следующим образом: | ||
ДОЛГОЙ | 64-разрядное целое число со знаком. Диапазон значений: от — 72036854775808 до 72036854775807 в десятичной системе. Этот тип объявлен в WinNT.h следующим образом:
| ||
LONG_PTR | Длинный тип со знаком для точности указателя. Используйте при приведении указателя к long для выполнения арифметики указателя. Этот тип объявлен в BaseTsd.h следующим образом:
| ||
LONG32 | 32-разрядное целое число со знаком. Диапазон значений: от -2147483648 до 2147483647 в десятичной системе. Этот тип объявлен в BaseTsd.h следующим образом: | ||
LONG64 | 64-разрядное целое число со знаком.Диапазон значений: от — 72036854775808 до 72036854775807 в десятичной системе. Этот тип объявлен в BaseTsd.h следующим образом: | ||
LPARAM | Параметр сообщения. Этот тип объявлен в WinDef.h следующим образом: | ||
LPBOOL | Указатель на BOOL . Этот тип объявлен в WinDef.h следующим образом: | ||
LPBYTE | Указатель на BYTE . Этот тип объявлен в WinDef.h следующим образом: | ||
LPCOLORREF | Указатель на значение COLORREF . Этот тип объявлен в WinDef.h следующим образом: | ||
LPCSTR | Указатель на константную строку с завершающим нулем из 8-битных символов Windows (ANSI). Для получения дополнительной информации см. Наборы символов, используемые шрифтами. Этот тип объявлен в WinNT.h следующим образом: | ||
LPCTSTR | LPCWSTR , если определен UNICODE , в противном случае — LPCSTR .Дополнительные сведения см. В разделе Типы данных Windows для строк. Этот тип объявлен в WinNT.h следующим образом:
| ||
LPCVOID | Указатель на константу любого типа. Этот тип объявлен в WinDef.h следующим образом: | ||
LPCWSTR | Указатель на постоянную строку с завершающим нулем, состоящую из 16-разрядных символов Юникода. Для получения дополнительной информации см. Наборы символов, используемые шрифтами. Этот тип объявлен в WinNT.h следующим образом: | ||
LPDWORD | Указатель на DWORD . Этот тип объявлен в WinDef.h следующим образом: | ||
РУКОЯТКА | Указатель на HANDLE . Этот тип объявлен в WinDef.h следующим образом: | ||
LPINT | Указатель на INT . Этот тип объявлен в WinDef.h следующим образом: | ||
LPLONG | Указатель на LONG . Этот тип объявлен в WinDef.h следующим образом: | ||
LPSTR | Указатель на строку с завершающим нулем из 8-битных символов Windows (ANSI). Для получения дополнительной информации см. Наборы символов, используемые шрифтами. Этот тип объявлен в WinNT.h следующим образом: | ||
ЛПЦТР | LPWSTR , если определен UNICODE , в противном случае — LPSTR .Дополнительные сведения см. В разделе Типы данных Windows для строк. Этот тип объявлен в WinNT.h следующим образом:
| ||
LPVOID | Указатель на любой тип. Этот тип объявлен в WinDef.h следующим образом: | ||
LPWORD | Указатель на WORD . Этот тип объявлен в WinDef.h следующим образом: | ||
LPWSTR | Указатель на строку с завершающим нулем из 16-битных символов Юникода. Для получения дополнительной информации см. Наборы символов, используемые шрифтами. Этот тип объявлен в WinNT.h следующим образом: | ||
LRESULT | Подписанный результат обработки сообщения. Этот тип объявлен в WinDef.h следующим образом: | ||
PBOOL | Указатель на BOOL . Этот тип объявлен в WinDef.h следующим образом: | ||
PBOOLEAN | Указатель на BOOLEAN . Этот тип объявлен в WinNT.h следующим образом: | ||
PBYTE | Указатель на BYTE . Этот тип объявлен в WinDef.h следующим образом: | ||
ПЧАР | Указатель на CHAR . Этот тип объявлен в WinNT.h следующим образом: | ||
PCSTR | Указатель на константную строку с завершающим нулем из 8-битных символов Windows (ANSI). Для получения дополнительной информации см. Наборы символов, используемые шрифтами. Этот тип объявлен в WinNT.h следующим образом: | ||
PCTSTR | PCWSTR , если определен UNICODE , в противном случае — PCSTR . Дополнительные сведения см. В разделе Типы данных Windows для строк. Этот тип объявлен в WinNT.h следующим образом:
| ||
PCWSTR | Указатель на постоянную строку с завершающим нулем, состоящую из 16-разрядных символов Юникода.Для получения дополнительной информации см. Наборы символов, используемые шрифтами. Этот тип объявлен в WinNT.h следующим образом: | ||
PDWORD | Указатель на DWORD . Этот тип объявлен в WinDef.h следующим образом: | ||
PDWORDLONG | Указатель на DWORDLONG . Этот тип объявлен в WinNT.h следующим образом: | ||
PDWORD_PTR | Указатель на DWORD_PTR . Этот тип объявлен в BaseTsd.h следующим образом: | ||
PDWORD32 | Указатель на DWORD32 . Этот тип объявлен в BaseTsd.h следующим образом: | ||
PDWORD64 | Указатель на DWORD64 . Этот тип объявлен в BaseTsd.h следующим образом: | ||
PFLOAT | Указатель на FLOAT . Этот тип объявлен в WinDef.h следующим образом: | ||
PHALF_PTR | Указатель на HALF_PTR . Этот тип объявлен в BaseTsd.h следующим образом:
| ||
ЛАНДШАФТ | Указатель на HANDLE . Этот тип объявлен в WinNT.h следующим образом: | ||
PHKEY | Указатель на HKEY . Этот тип объявлен в WinDef.h следующим образом: | ||
PINT | Указатель на INT . Этот тип объявлен в WinDef.h следующим образом: | ||
PINT_PTR | Указатель на INT_PTR . Этот тип объявлен в BaseTsd.h следующим образом: | ||
PINT8 | Указатель на INT8 . Этот тип объявлен в BaseTsd.h следующим образом: | ||
PINT16 | Указатель на INT16 . Этот тип объявлен в BaseTsd.h следующим образом: | ||
PINT32 | Указатель на INT32 . Этот тип объявлен в BaseTsd.h следующим образом: | ||
PINT64 | Указатель на INT64 . Этот тип объявлен в BaseTsd.h следующим образом: | ||
PLCID | Указатель на LCID . Этот тип объявлен в WinNT.h следующим образом: | ||
PLONG | Указатель на LONG . Этот тип объявлен в WinNT.h следующим образом: | ||
PLONGLONG | Указатель на LONGLONG . Этот тип объявлен в WinNT.h следующим образом: | ||
PLONG_PTR | Указатель на LONG_PTR . Этот тип объявлен в BaseTsd.h следующим образом: | ||
PLONG32 | Указатель на LONG32 . Этот тип объявлен в BaseTsd.h следующим образом: | ||
PLONG64 | Указатель на LONG64 . Этот тип объявлен в BaseTsd.h следующим образом: | ||
POINTER_32 | 32-битный указатель. В 32-битной системе это собственный указатель. В 64-битной системе это усеченный 64-битный указатель. Этот тип объявлен в BaseTsd.h следующим образом:
| ||
POINTER_64 | 64-битный указатель. В 64-битной системе это собственный указатель. В 32-битной системе это 32-битный указатель с расширенным знаком. Обратите внимание, что принимать состояние бита высокого указателя небезопасно. Этот тип объявлен в BaseTsd.h следующим образом:
| ||
ПОДПИСАННЫЙ УКАЗАТЕЛЬ | Указатель со знаком. Этот тип объявлен в BaseTsd.h следующим образом: | ||
POINTER_UNSIGNED | Беззнаковый указатель. Этот тип объявлен в BaseTsd.h следующим образом: | ||
PSHORT | Указатель на SHORT . Этот тип объявлен в WinNT.h следующим образом: | ||
PSIZE_T | Указатель на SIZE_T . Этот тип объявлен в BaseTsd.h следующим образом: | ||
PSSIZE_T | Указатель на SSIZE_T . Этот тип объявлен в BaseTsd.h следующим образом: | ||
PSTR | Указатель на строку с завершающим нулем из 8-битных символов Windows (ANSI). Для получения дополнительной информации см. Наборы символов, используемые шрифтами. Этот тип объявлен в WinNT.h следующим образом: | ||
PTBYTE | Указатель на ТБайт . Этот тип объявлен в WinNT.h следующим образом: | ||
PTCHAR | Указатель на TCHAR . Этот тип объявлен в WinNT.h следующим образом: | ||
PTSTR | PWSTR , если определен UNICODE , в противном случае — PSTR .Дополнительные сведения см. В разделе Типы данных Windows для строк. Этот тип объявлен в WinNT.h следующим образом:
| ||
PUCHAR | Указатель на УЧАР . Этот тип объявлен в WinDef.h следующим образом: | ||
PUHALF_PTR | Указатель на UHALF_PTR . Этот тип объявлен в BaseTsd.h следующим образом:
| ||
PUINT | Указатель на UINT . Этот тип объявлен в WinDef.h следующим образом: | ||
PUINT_PTR | Указатель на UINT_PTR . Этот тип объявлен в BaseTsd.h следующим образом: | ||
PUINT8 | Указатель на UINT8 . Этот тип объявлен в BaseTsd.h следующим образом: | ||
PUINT16 | Указатель на UINT16 . Этот тип объявлен в BaseTsd.h следующим образом: | ||
PUINT32 | Указатель на UINT32 . Этот тип объявлен в BaseTsd.h следующим образом: | ||
PUINT64 | Указатель на UINT64 . Этот тип объявлен в BaseTsd.h следующим образом: | ||
PULONG | Указатель на ULONG . Этот тип объявлен в WinDef.h следующим образом: | ||
PULONGLONG | Указатель на ULONGLONG . Этот тип объявлен в WinDef.h следующим образом: | ||
PULONG_PTR | Указатель на ULONG_PTR . Этот тип объявлен в BaseTsd.h следующим образом: | ||
PULONG32 | Указатель на ULONG32 . Этот тип объявлен в BaseTsd.h следующим образом: | ||
PULONG64 | Указатель на ULONG64 . Этот тип объявлен в BaseTsd.h следующим образом: | ||
PUSHORT | Указатель на USHORT . Этот тип объявлен в WinDef.h следующим образом: | ||
PVOID | Указатель на любой тип. Этот тип объявлен в WinNT.h следующим образом: | ||
PWCHAR | Указатель на WCHAR . Этот тип объявлен в WinNT.h следующим образом: | ||
PWORD | Указатель на WORD . Этот тип объявлен в WinDef.h следующим образом: | ||
PWSTR | Указатель на строку с завершающим нулем из 16-битных символов Юникода. Для получения дополнительной информации см. Наборы символов, используемые шрифтами. Этот тип объявлен в WinNT.h следующим образом: | ||
QWORD | 64-разрядное целое число без знака. Этот тип объявлен следующим образом: | ||
SC_HANDLE | Дескриптор базы данных диспетчера управления службами. Для получения дополнительной информации см. Ручки SCM. Этот тип объявлен в WinSvc.h следующим образом: | ||
SC_LOCK | Блокировка базы данных диспетчера управления службами. Для получения дополнительной информации см. Ручки SCM. Этот тип объявлен в WinSvc.h следующим образом: | ||
SERVICE_STATUS_HANDLE | Дескриптор значения состояния службы. Для получения дополнительной информации см. Ручки SCM. Этот тип объявлен в WinSvc.h следующим образом: | ||
КОРОТКИЕ | 16-разрядное целое число. Диапазон значений: от -32768 до 32767 в десятичной системе. Этот тип объявлен в WinNT.h следующим образом: | ||
РАЗМЕР_Т | Максимальное количество байтов, на которое может указывать указатель.Используется для подсчета, который должен охватывать весь диапазон указателя. Этот тип объявлен в BaseTsd.h следующим образом: | ||
SSIZE_T | Подписанная версия SIZE_T . Этот тип объявлен в BaseTsd.h следующим образом: | ||
ТБайт | WCHAR , если определен UNICODE , в противном случае — CHAR . Этот тип объявлен в WinNT.h следующим образом:
| ||
ТЧАР | WCHAR , если определено UNICODE , в противном случае — CHAR . Этот тип объявлен в WinNT.h следующим образом:
| ||
УЧАР | Беззнаковый CHAR . Этот тип объявлен в WinDef.h следующим образом: | ||
UHALF_PTR | Без знака HALF_PTR .Используйте в структуре, содержащей указатель и два небольших поля. Этот тип объявлен в BaseTsd.h следующим образом:
| ||
УИНТ | Без знака INT . Диапазон значений — от 0 до 4294967295 в десятичной системе. Этот тип объявлен в WinDef.h следующим образом: | ||
UINT_PTR | Без знака INT_PTR . Этот тип объявлен в BaseTsd.h следующим образом:
| ||
UINT8 | Без знака INT8 . Этот тип объявлен в BaseTsd.h следующим образом: | ||
UINT16 | Без знака INT16 . Этот тип объявлен в BaseTsd.h следующим образом: | ||
UINT32 | Без знака INT32 . Диапазон значений — от 0 до 4294967295 в десятичной системе. Этот тип объявлен в BaseTsd.h следующим образом: | ||
UINT64 | Без знака INT64 . Диапазон значений: от 0 до 18446744073709551615 в десятичной системе. Этот тип объявлен в BaseTsd.h следующим образом: | ||
ULONG | Без знака LONG .Диапазон значений — от 0 до 4294967295 в десятичной системе. Этот тип объявлен в WinDef.h следующим образом: | ||
ULONGLONG | 64-разрядное целое число без знака. Диапазон значений: от 0 до 18446744073709551615 в десятичной системе. Этот тип объявлен в WinNT.h следующим образом:
| ||
ULONG_PTR | Беззнаковый LONG_PTR . Этот тип объявлен в BaseTsd.h следующим образом:
| ||
ULONG32 | Без знака LONG32 . Диапазон значений — от 0 до 4294967295 в десятичной системе. Этот тип объявлен в BaseTsd.h следующим образом: | ||
ULONG64 | Без знака LONG64 . Диапазон значений: от 0 до 18446744073709551615 в десятичной системе. Этот тип объявлен в BaseTsd.h следующим образом: | ||
UNICODE_STRING | Строка Unicode. Этот тип объявлен в Winternl.h следующим образом:
| ||
USHORT | Без знака КОРОТКИЙ . Диапазон значений — от 0 до 65 535 десятичных знаков. Этот тип объявлен в WinDef.h следующим образом: | ||
США | Порядковый номер обновления (USN). Этот тип объявлен в WinNT.h следующим образом: | ||
ИД | Любого типа. Этот тип объявлен в WinNT.h следующим образом: | ||
WCHAR | 16-битный символ Юникода.Для получения дополнительной информации см. Наборы символов, используемые шрифтами. Этот тип объявлен в WinNT.h следующим образом: | ||
WINAPI | Соглашение о вызовах системных функций. Этот тип объявлен в WinDef.h следующим образом: CALLBACK , WINAPI и APIENTRY используются для определения функций с соглашением о вызовах __stdcall.Большинство функций в Windows API объявлено с использованием WINAPI . Вы можете использовать CALLBACK для функций обратного вызова, которые вы реализуете, чтобы помочь идентифицировать функцию как функцию обратного вызова. | ||
СЛОВО | 16-битовое целое число без знака. Диапазон значений — от 0 до 65 535 десятичных знаков. Этот тип объявлен в WinDef.h следующим образом: | ||
WPARAM | Параметр сообщения. Этот тип объявлен в WinDef.h следующим образом: |
Средство преобразования слов в биты
Armazenamento De DadosBit
Bit — это базовая единица вооружения цифровой информации. É um acrônimo para dígito binário. Cada bit registra uma das duas respostas Possíveis a uma única pergunta: 0 ou 1, sim ou não, ligado ou desligado. Quando um dado является представителем como binário (base 2) números, cada dígito binário é um único bit.(Em 1946, палавра «бит» для изобретенного американского ученого-ученого Джона Тьюки.)
Байт
Байт — это один единственный источник информации, используемый в вычислительной технике. Refere-se a uma unidade de memória endereçável. Seu tamanho Pode Variar dependendo da máquina или linguagem de computação. На главном уровне контекста um byte é igual — 8 бит (или 1 октет). (Em 1956, unidade foi nomeado pelo engenheiro da IBM, Werner Buchholz.)
Caráter
Нет информации в цифровом формате, um carácter é igual a um byte or 8 bit.
Gibibyte
Гибибайт — это многократный байт, единое целое с цифровой информацией, prefixados pelas normas base multiplicador gibi (símbolo Gi). O símbolo da unidade de gibibyte é GiB.
Gigabit
Gigabit — это единое целое для цифровой информации или передачи. Размер 1024 мегабит, 1048576 килобит или 1073741824 бит
Gigabyte
Gigabyte — это единое хранилище цифровых данных. Размер 1024 мегабайта, 1.048,576 килобайт, или 1073741824 байта
Kibibyte
O KibiByte (символ KiB, против бинарных килобайт) является одним из средств массовой информации электронного вооружения, установленным в коммерческом сообществе (IEC 2000). 1 кибибайт = 1,024 байта
килобит
килобит — это единый блок цифровой информации или передачи. Значение 1024 бит.
Kilobyte
Kilobyte É uma unidade de armazenamento de dados digitais.É igual 1024 байта.
Мебибайт
Мебибайт, состоящий из нескольких байтов, имеет единое целое с цифровой информацией, префикс для умножения базовых значений множителя (символ Mi). Символы унидад де мебибайт é MiB.
Мегабит
Мегабит — это единое целое для цифровой информации или передачи. Значение 1024 или 1.048.576 бит.
Мегабайт
Мегабайт — это единая единица хранения цифровых данных. É igual 1024 килобайт или 1.048,576 байт.
Mword
Нет цифрового информационного наполнения, мм Mword имеет 4 байта или 32 бита.
Nibble
Nibble — Sucessão de quatro cifras binárias (биты) [1]. Полубайт = 4 бита, 2 полубайта = 1 байт = 8 бит, 4 полубайта = 1 слово = 2 байта = 16 бит
Петабит
Петабит — это единое целое для цифровой информации или передачи. É igual 1024 терабайта, 1048576 гигабит, 1073741824 мегабит.
Петабайт
Петабайт — это единственная единица вооружения цифровых данных.Размер 1024 терабайта, 1.048.576 гигабайт, 1073741824 мегабайт.
Qword
Нет информации в цифровом формате, Qword имеет 8 или 64 бита.
Tebibyte
O tebibyte é um múltiplo do byte, uma unidade de armazenamento de informação digital, prefixados pelas normas base multiplicador Tebi (símbolo Ti). O símbolo da unidade de tebibyte é TiB.
Терабит
Терабит — это единая единица вооружения цифровой информации или передачи.É igual 1024 гигабайт, 1048576 мегабит, 1073741824 килобит.
Терабайт
Терабайт — это единая упаковка цифровых данных. Размер составляет 1024 гигабайта, 1.048.576 мегабайт, килобайт 1073741824.
Палавра
Нет цифрового информационного наполнения, может быть 2 байта или 16 бит.