Letysite.ru

IT Новости с интернет пространства
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Тип данных word c

Тип данных word c

Данные каким-либо образом необходимо представлять в памяти компьютера. Существует множество различных типов данных, простых и довольно сложных, имеющих большое число компонентов и свойств. Однако, для компьютера необходимо использовать некий унифицированный способ представления данных, некоторые элементарные составляющие, с помощью которых можно представить данные абсолютно любых типов. Этими составляющими являются числа, а вернее, цифры, из которых они состоят. С помощью цифр можно закодировать практически любую дискретную информацию. Поэтому такая информация часто называется цифровой (в отличие от аналоговой, непрерывной).

Первым делом необходимо выбрать систему счисления, наиболее подходящую для применения в конкретных устройствах. Для электронных устройств самой простой реализацией является двоичная система: есть ток — нет тока, или малый уровень тока — большой уровень тока. Хотя наиболее эффективной являлась бы троичная система. Наверное, выбор двоичной системы связан еще и с использование перфокарт, в которых она проявляется в виде наличия или отсутствия отверстия. Отсюда в качестве цифр для представления информации используются 0 и 1.

Таким образом данные в компьютере представляются в виде потока нулей и единиц. Один разряд этого потока называется битом. Однако в таком виде неудобно оперировать с данными вручную. Стандартом стало разделение всего потока на равные последовательные группы из 8 битов — байты или октеты. Далее несколько байтов могут составлять слово. Здесь следует разделять машинное слово и слово как тип данных. В первом случае его разрядность обычно равна разрядности процессора, т.к. машинное слово является наиболее эффективным элементом для его работы. В случае, когда слово трактуется как тип данных (word), его разрядность всегда равна 16 битам (два последовательных байта). Также как типы данных существую двойные слова (double word, dword, 32 бита), четверные слова (quad word, qword, 64 бита) и т.п.

Теперь мы вплотную подошли к представлению целых чисел в памяти. Т.к. у нас есть байты и различные слова, то можно создать целочисленные типы данных, которые будут соответствовать этим элементарным элементам: byte (8 бит), word (16 бит), dword (32 бита), qword (64 бита) и т.д. При этом любое число этих типов имеет обычное двоичное представление, дополненное нулями до соответствующей размерности. Можно заметить, что число меньшей размерности можно легко представить в виде числа большей размерности, дополнив его нулями, однако в обратном случае это не верно. Поэтому для представления числа большей размерности необходимо использовать несколько чисел меньшей размерности. Например:

  • qword (64 бита) можно представить в виде 2 dword (32 бита) или 4 word (16 бит) или 8 byte (8 бит);
  • dword (32 бита) можно представить в виде 2 word (16 бит) или 4 byte (8 бит);
  • word (16 бит) можно представить в виде 2 byte (8 бит);

Если A — число, B1..Bk — части числа, N — разрядность числа, M — разрядность части, N = k*M, то:

  • A = F1E2D3C4B5A69788 (qword)
  • A = 2 32 * F1E2D3C4 (dword) + 2 0 * B5A69788 (dword)
  • A = 2 48 * F1E2 (word) + 2 32 * D3C4 (word) + 2 16 * B5A6 (word) + 2 0 * 9788 (word)
  • A = 2 56 * F1 (byte) + 2 48 * E2 (byte) + . + 2 8 * 97 (byte) + 2 0 * 88 (byte)

Существуют понятия младшая часть (low) и старшая часть (hi) числа. Старшая часть входит в число с коэффициентом 2 N-M , а младшая с коэффициентом 2 0 . Например:

Байты числа можно хранить в памяти в различном порядке. В настоящее время используются два способа расположения: в прямом порядке байт и в обратном порядке байт. В первом случае старший байт записывается в начале, затем последовательно записываются остальные байты, вплоть до младшего. Такой способ используется в процессорах Motorola и SPARC. Во втором случае, наоборот, сначала записывает младший байт, а затем последовательно остальные байты, вплоть до старшего. Такой способ используется в процессорах архитектуры x86 и x64. Далее приведен пример:

Используя подобные целочисленные типы можно представить большое количество неотрицательных чисел: от 0 до 2 N -1, где N — разрядность типа. Однако, целочисленный тип подразумевает представление также и отрицательных чисел. Можно ввести отдельные типы для отрицательных чисел от -2 N до -1, но тогда такие типы потеряют универсальность хранить и неотрицательные, и отрицательные числа. Поэтому для определения знака числа можно выделить один бит из двоичного представления. По соглашению, это старший бит. Остальная часть числа называется мантиссой.

Если старший бит равен нулю, то мантисса есть обычное представление числа от 0 до 2 N-1 -1. Если же старший бит равен 1, то число является отрицательным и мантисса представляет собой так называемый дополнительный код числа. Поясним на примере:

Как видно из рисунка, дополнительный код равен разнице между числом 2 N-1 и модулем исходного отрицательного числа (127 (1111111) = 128 (10000000) — |-1| (0000001)). Из этого вытекает, что сумма основного и дополнительного кода одного и того же числа равна 2 N-1 .

Из вышеописанного получается, что можно использовать только целочисленные типы со знаком для описания чисел. Однако существует множество сущностей, которые не требуют отрицательных значений, а значит, место под знак можно включить в представление неотрицательного числа, удвоив количество различных неотрицательных значений. Как результат, в современных компьютерах используются как типы со знаком или знаковые типы, так и типы без знака или беззнаковые типы.

Читать еще:  Как создать впр в excel

В итоге можно составить таблицу наиболее используемых целочисленных типов данных:

Тип данных word c

Здравствуйте, LukS, Вы писали:

LS>Подскажите пожалуйста, где можно найти информацию по этим указателям? Я даже не знаю по какому слову искать.
ищи в msdn(http://msdn.microsoft.com/), прям в поиске набирай))

Здравствуйте, LukS, Вы писали:

LS>Недавно начал изучать C++. До этого писал всё на PHP, а там типов данных (ну их указывать не нужно, точнее не ненужно а не обязательно) нет. Вообщем, я не могу понять, что это за тип данных DWORD, WORD? Двойное слово? И еще. Я уже измучился указывать (LPCWSTR) и т.д. Я так понял, это константный указатель на тип char и wchar_t. Но я набрёл на еще кучу таких-же указателей: WPARAM, LPARAM, LRESULT. И т.д.. Подскажите пожалуйста, где можно найти информацию по этим указателям? Я даже не знаю по какому слову искать.
Это не типы C++, а алиасы типов из windows api. Лучше всего начать с изучения соответствующей литературы. В форуме уже много раз были вопросы про литературу для начинающих, поиском найти не сложно.

Здравствуйте, coba, Вы писали:

C>Здравствуйте, LukS, Вы писали:

LS>>Подскажите пожалуйста, где можно найти информацию по этим указателям? Я даже не знаю по какому слову искать.
C>ищи в msdn(http://msdn.microsoft.com/), прям в поиске набирай))

Спасибо, но у меня с английским плохо =) Дошло что dword это 4-х байтовый char. Только зачем он? И как превратить char в dword? Просто указать dword dVar = (dword)cStr; ? Насчет указателей я имел ввиду LPCSTR, LPSTR, LPCWSTR и т.д.. Указатели я и так знаю =)

Здравствуйте, LukS, Вы писали:

LS>Недавно начал изучать C++. До этого писал всё на PHP, а там типов данных (ну их указывать не нужно, точнее не ненужно а не обязательно) нет. Вообщем, я не могу понять, что это за тип данных DWORD, WORD? Двойное слово? И еще. Я уже измучился указывать (LPCWSTR) и т.д. Я так понял, это константный указатель на тип char и wchar_t. Но я набрёл на еще кучу таких-же указателей: WPARAM, LPARAM, LRESULT. И т.д.. Подскажите пожалуйста, где можно найти информацию по этим указателям? Я даже не знаю по какому слову искать.

Ууу. Похоже, вы взялись изучать сразу С++ и WinAPI. Лучше не надо. Сначала прочитайте какую-нибудь книжку по С++.

Все упомянутые вами типы относятся к WinAPI, а не к С++, и их названия и смысл обусловлены историческими причинами, так что понять их и нельзя, это нужно запомнить (ну не совсем, но сейчас точно вдаваться в историю ни к чему). Про них нужно читать в какой-нибудь книжке по WinAPI.

На этом сайте, кстати, есть раздел с описаниями книг.

Здравствуйте, LukS, Вы писали:

LS>Недавно начал изучать C++. До этого писал всё на PHP, а там типов данных (ну их указывать не нужно, точнее не ненужно а не обязательно) нет. Вообщем, я не могу понять, что это за тип данных DWORD, WORD? Двойное слово? И еще. Я уже измучился указывать (LPCWSTR) и т.д. Я так понял, это константный указатель на тип char и wchar_t. Но я набрёл на еще кучу таких-же указателей: WPARAM, LPARAM, LRESULT. И т.д.. Подскажите пожалуйста, где можно найти информацию по этим указателям? Я даже не знаю по какому слову искать.

WPARAM, LPARAM, LRESULT — это не указатели. Не всегда тайпдефят по принципу LP. === long pointer. со временем это просто запоминается.
А в С++ не так уж много типов. Вот здесь основные С++ типы, все остальное — это typedef/define от них. Да и то, типы с двумя подчеркиваниями вроде __int8 — это уже microsoft specific. Кстати, а вот насчет wchar_t интересно, есть ли в стандарте.
Если не помните/не знаете, что это за тип, тыкаете в Вижуал Студии на него, и в меню выбираете Goto definition. Можно просто мышкой навести — если студия в этот момент не заглючит, она во всплывающей подсказке покажет, как тип объявлен. Только для этого должен быть включен заголовок (ну, у меня студия не найдет объявление без заголовка). Для основных Виндовс типов достаточно включить windows.h и tchar.h

Также можно искать в МСДН — набираете непонятное слово в Индексе и находите нужную статью. При необходимости синхронизируетесь с оглавлением (есть такая кнопочка на тулбаре МСДН-а) и смотрите рядом лежащие статьи.

Почему в C++ мы используем DWORD, а не unsigned int?

Я не боюсь признаться, что я немного новичок в C++, так что это может показаться глупым вопросом, но.

Я вижу, что DWORD используется повсюду в примерах кода. Когда я смотрю, что на самом деле означает DWORD, это, по-видимому, просто неподписанный int (от 0 до 4,294,967,295). Итак, мой вопрос заключается в следующем: почему у нас есть DWORD? Что же это дает нам, чего не дает интегральный тип ‘unsigned int’? Это как-то связано с мобильностью и различиями в машинах?

Читать еще:  Word специальная вставка

4 Ответов

DWORD не является типом C++, он определен в .

Причина в том, что DWORD имеет определенный диапазон и формат, на который полагаются функции Windows, поэтому, если вам требуется этот конкретный диапазон, используйте этот тип. (Или как они говорят: «когда ты в Риме, делай так, как делают римляне.») Для вас это соответствует unsigned int , но это может быть не всегда так. Чтобы быть в безопасности, используйте DWORD , когда ожидается DWORD , независимо от того, что это может быть на самом деле.

Например, если бы они когда-либо изменили диапазон или формат unsigned int , они могли бы использовать другой тип, чтобы подчинить DWORD тем же требованиям, и весь код, использующий DWORD , был бы none-the-wiser. (Аналогично, они могут решить, что DWORD должен быть unsigned long long , изменить его, и весь код, использующий DWORD , будет none-the-wiser.)

Также обратите внимание, что unsigned int не обязательно имеет диапазон от 0 до 4,294,967,295. Видеть здесь .

Когда MS-DOS и Windows 3.1 работали в 16-разрядном режиме, слово Intel 8086 составляло 16 бит, Microsoft WORD-16 бит, Microsoft DWORD-32 бита, а типичный неподписанный int компилятора составлял 16 бит.

Когда Windows NT работал в 32-разрядном режиме, слово Intel 80386 составляло 32 бита, Microsoft WORD-16 бит, Microsoft DWORD-32 бита, а типичный неподписанный int компилятора-32 бита. Имена WORD и DWORD больше не были самоописательными, но они сохранили функциональность программ Microsoft.

Когда Windows работает в 64-битном режиме, процессор Intel составляет 64 бит, Майкрософт WORD-16 бит, Майкрософт DWORD-это 32 бита, и типичного компилятора неподписанных int-это 32 бита. Имена WORD и DWORD больше не являются самоописательными, AND unsigned int больше не соответствует принципу наименьших сюрпризов, но они сохраняют функциональность множества программ.

Я не думаю, что WORD или DWORD когда-нибудь изменятся.

SDK разработчики предпочитают определять свои собственные типы с помощью typedef. Это позволяет изменять базовые типы только в одном месте, без изменения всего клиентского кода. Важно следовать этой конвенции. DWORD вряд ли будет изменен, но типы, такие как DWORD_PTR, отличаются на разных платформах, таких как Win32 и x64. Итак, если какая-то функция имеет параметр DWORD, используйте DWORD, а не unsigned int, и ваш код будет скомпилирован во всех будущих версиях заголовков windows.

Для себя я бы предположил, что unsigned int является специфичной платформой. Целое число может быть 8 бит, 16 бит, 32 бита или даже 64 бита.

DWORD с другой стороны, указывает свой собственный размер, который является двойным словом. Word — это 16 бит, поэтому DWORD будет называться 32-битным по всей платформе

Похожие вопросы:

предупреждение: сужающее преобразование ‘(stride * 4u) ‘из ‘unsigned int’ в’ WORD ‘ внутри < >неправильно сформировано в C++11 [-Wnarrowing] Я не могу понять, почему я.

Мой вопрос прост (я надеюсь)о синтаксисе c относительно объявления указателя. Я полностью осведомлен о том, как объявить указатель, как его использовать и каковы эффекты, например, следующим.

Я видел это из C Primer Plus, 6-го издания , вопросы обзора в главе 3. Вопрос: Ответ в приложении а: Обратите внимание d.0XAA, мой ответ int константа, шестнадцатеричный формат, но ответ unsigned.

Возможный Дубликат : сравнение unsigned int и signed char int j = 10; unsigned int i = 10; if( j > -1 ) printf(1n); else printf(2n); if( i > -1 ) printf(3n); else printf(4n); Выход есть .

Я получаю эту ошибку и не могу ее исправить. Любая помощь приветствуется. Спасибо. ошибка C2440: ‘=’: не удается преобразовать из ‘DWORD *’ в ‘unsigned int’ IntelliSense: значение типа DWORD *.

Error: Cannot convert DWORD* to ‘long unsigned int*’ for argument 1 to int tea_encrypt(long unsigned int*,) Вот этот код : bool CLZObject::Encrypt(DWORD * pdwKey) < if.

Поскольку long шире, чем int, дающий Нижний порядок unsigned long должен возвращать что-то большее, чем просто Нижний порядок unsigned int. Почему функция все еще знает, что такое нижний порядок.

Эта программа <$APPTYPE CONSOLE> <$TYPEDADDRESS ON>uses Winapi.Windows; procedure Foo(P: PDWORD); begin end; procedure Bar; var dw: DWORD; begin Foo(@dw); end; begin end. компилируется в XE3, но не.

Когда мы рассматриваем некоторые фундаментальные типы данных, такие как char и int, мы знаем, что char-это просто беззнаковый байт (в зависимости от языка), int-это просто знаковое слово dword.

Я считаю, что когда вы добавляете два значения unsigned int вместе, тип данных возвращаемого значения будет unsigned int . Но добавление двух значений unsigned int может возвращать значение, которое.

Операционная система Microsoft Windows 3.1 для программиста

8.2. Типы данных

Для разработки приложений Windows используется большое количество типов данных и констант, определенных в таких файлах, как windows.h, commdlg.h и других. Эти типы данных как бы замещают собой стандартные типы данных языка Си.

Такая замена позволяет отделить программный интерфейс Windows от самой операционной системы Windows, с одной стороны, и от конкретных реализаций компиляторов языка Си, с другой. Например, система разработки программ Borland C++ версии 3.1 трактует тип unsigned int как беззнаковое целое размером 16 бит. В файле windows.h определен тип UNIT, который для указанной выше системы разработки отображается на тип unsigned int :

Читать еще:  Set login password

Однако при разработке 32-разрядных приложений (таких, как Windows NT) для 32-разрядных процессоров тип UINT должен иметь размер 32 бит. Если вы будете думать о типе UINT как о типе, который используется для представления беззнакового целого естественной для данного процессора длины, вы можете избежать ошибок, связанных с неправильным определением размера целого числа без знака.

Другой пример — дальний указатель на строку символов char _far *. Для разработки приложений Windows версии 3.1 в среде разработки Borland C++ вместо этого типа данных используется тип LPSTR, определенный следующим образом:

Ключевое слово FAR определено так:

В 16-разрядной среде тип LPSTR отображается на дальний указатель, состоящий из селектора и смещения. В 32-разрядной среде при использовании сплошной (FLAT) модели памяти содержимое сегментных регистров устанавливается один раз при запуске приложения и в дальнейшем не изменяется (самим приложением). Для адресации в этом случае используется только 32-разрядная компонента смещения.

Если ваша программа использует тип LPSTR, при ее переносе в среду Windows NT вам не придется изменять исходные тексты, достаточно выполнить новую трансляцию. Для этой операционной системы ключевое слово FAR определено как пустое место:

Поэтому все дальние указатели, определенные с использованием этого ключевого слова, автоматически превратятся в ближние (что и требовалось).

Если бы вы определяли дальний указатель на строку символов как char _far *, вам бы пришлось удалять или переопределять ключевое слово _far.

Типы данных в файле windows.h

Файл windows.h должен включаться во все исходные файлы приложений Windows. Он содержит определение типов данных, символических имен констант и прототипы функций программного интерфейса Windows.

Для создания мобильных приложений, которые вы сможете перенести в среду Windows NT или аналогичную среду, поддерживающую программный интерфейс Windows, следует пользоваться не стандартными типами данных, реализованными в конкретной версии системы, а теми типами данных, которые определены в файле windows.h.

Этот файл содержит описание базовых типов и производных, созданных из базовых. Имена типов (как правило, это указатели) могут начинаться с префикса. Префикс LP означает дальний указатель (Long Pointer), префикс NP — ближний указатель (Near Pointer), и префикс P — указатель без определения типа. Для константных типов данных (определенных с ключевым словом const) после префикса добавляется буква «C», например, LPCSTR.

Pascal. Простые типы данных

При описании переменной необходимо указать ее тип. Тип переменной описывает набор значений, которые она может принимать, и действия, которые могут быть над ней выполнены. Описание типа определяет идентификатор, который обозначает тип.

Простые типы делятся на стандартные (порядковые) и перечисляемые (ограниченные).

Стандартные типы

Турбо-Паскаль имеет четыре встроенных стандартных типа: integer (целое), real (вещественное), boolean (логический) и char (символьный).

Целочисленный тип (integer)

В Турбо-Паскале имеется пять встроенных целочисленных типов: shortint (короткое целое), integer (целое), longint (длинное целое), byte (длиной в байт) и word (длиной в слово). Каждый тип обозначает определенное подмножество целых чисел, как это показано в следующей Таблице.

Встроенные целочисленные типы.

Тип

Диапазон

Формат

8 битов со знаком

16 битов со знаком

32 бита со знаком

8 битов без знака

16 битов без знака

Арифметические действия над операндами целочисленного типа осуществляются в соответствии со следующими правилами:

  1. Тип целой константы представляет собой встроенный целочисленный тип с наименьшим диапазоном, включающим значение этой целой константы.
  2. В случае бинарной операции (операции, использующей два операнда), оба операнда преобразуются к их общему типу перед тем, как над ними совершается действие. Общим типом является встроенный целочисленный тип с наименьшим диапазоном, включающим все возможные значения обоих типов. Например, общим типом для целого и целого длиной в байт является целое, а общим типом для целого и целого длиной в слово является длинное целое. Действие выполняется в соответствии с точностью общего типа и типом результата является общий тип.
  3. Выражение справа в операторе присваивания вычисляется независимо от размера переменной слева.

Операции совершаемые над целыми числами:

SQR — возведение в квадрат

DIV — после деления отбрасывает дробную часть

MOD — получение целого остатка после деления

ABS — модуль числа

RANDOM(X)-получение случайного числа от 0 до Х

Описываются переменные целого типа следующим образом:

var список переменных: тип;

Например: var а,р,n:integer;

Вещественный тип(real)

К вещественному типу относится подмножество вещественных чисел, которые могут быть представлены в формате с плавающей запятой с фиксированным числом цифр. Запись значения в формате с плавающей запятой обычно включает три значения — m, b и e — таким образом, что m*b е , где b всегда равен 10, а m и e являются целочисленными значениями в диапазоне вещественного типа. Эти значения m и e далее определяют диапазон и точность вещественного типа.

Имеется пять видов вещественных типов: real, singlе, duble, exnende, comp. Вещественные типы различаются диапазоном и точностью связанных с ними значений

Диапазон и десятичные цифры для вещественных типов

Ссылка на основную публикацию
Adblock
detector