Введение
Изменение выражения из одного типа данных в другой, процесс лицензирования в авиации. В информатике преобразование типа, приведение типа, принудительное преобразование типа – это различные способы изменения выражения из одного типа данных в другой. Примером может служить преобразование целочисленного значения в значение с плавающей точкой или его текстовое представление в виде строки и наоборот. Преобразования типов могут использовать определенные особенности иерархий типов или представлений данных. Два важных аспекта преобразования типа – это то, происходит ли оно неявно (автоматически) или явно, и преобразуется ли базовое представление данных из одного формата в другой, или же существующее представление просто переинтерпретируется как представление другого типа данных. В общем случае, могут быть преобразованы как примитивные, так и составные типы данных. Каждый язык программирования имеет свои правила преобразования типов. Языки со строгой типизацией обычно выполняют мало неявных преобразований и препятствуют переинтерпретации представлений, в то время как языки со слабой типизацией выполняют множество неявных преобразований между типами данных. Языки со слабой типизацией часто позволяют принудить компилятор произвольно интерпретировать элемент данных как имеющий различные представления – это может быть неочевидная ошибка программирования или технический метод для непосредственной работы с базовым аппаратным обеспечением. В большинстве языков термин "принуждение" используется для обозначения неявного преобразования, выполняемого либо во время компиляции, либо во время выполнения. Например, в выражении, содержащем целые числа и числа с плавающей точкой (например, 5 + 0.1), компилятор автоматически преобразует целочисленное представление в представление с плавающей точкой, чтобы избежать потери дробной части. Явные преобразования типа указываются либо путем написания дополнительного кода (например, добавления идентификаторов типа или вызова встроенных процедур), либо путем кодирования процедур преобразования для использования компилятором в случае возникновения ошибки несоответствия типов. В большинстве языков семейства ALGOL, таких как Pascal, Modula 2, Ada и Delphi, преобразование и приведение типа – это различные понятия. В этих языках преобразование относится к изменению значения из одного формата хранения типа данных в другой, как явно, так и неявно, например, из 16-битного целого числа в 32-битное целое число. В результате преобразования могут измениться требования к хранению, включая возможную потерю точности или усечение. Приведение типа, с другой стороны, относится к явному изменению интерпретации битового шаблона, представляющего значение, от одного типа к другому. Например, 32 последовательных бита могут рассматриваться как массив из 32 булевых значений, 4-байтовая строка, 32-битное целое число без знака или значение IEEE одинарной точности с плавающей точкой. Поскольку хранимые биты не изменяются, программист должен знать детали низкого уровня, такие как формат представления, порядок байтов и требования к выравниванию, чтобы выполнить приведение типа осмысленно. В языках семейства C и ALGOL 68 термин "приведение типа" обычно относится к явному преобразованию типа (в отличие от неявного преобразования), что может вызывать неоднозначность в отношении того, является ли это переинтерпретацией битового шаблона или преобразованием реального представления данных. Более важным является множество способов и правил, применяемых к тому, какой тип данных (или класс) находится по указателю и как компилятор может корректировать указатель в случаях, таких как наследование объектов (классов).
the aviation licensing process
In computer science, type conversion, type casting, type coercion, are different ways of changing an expression from one data type to another. An example would be the conversion of an integer value into a floating point value or its textual representation as a string, and vice versa. Type conversions can take advantage of certain features of type hierarchies or data representations. Two important aspects of a type conversion are whether it happens implicitly (automatically) or explicitly, and whether the underlying data representation is converted from one representation into another, or a given representation is merely reinterpreted as the representation of another data type. In general, both primitive and compound data types can be converted. Each programming language has its own rules on how types can be converted. Languages with strong typing typically do little implicit conversion and discourage the reinterpretation of representations, while languages with weak typing perform many implicit conversions between data types. Weak typing language often allow forcing the compiler to arbitrarily interpret a data item as having different representations—this can be a non obvious programming error, or a technical method to directly deal with underlying hardware. In most languages, the word coercion is used to denote an implicit conversion, either during compilation or during run time. For example, in an expression mixing integer and floating point numbers (like 5 + 0.1), the compiler will automatically convert integer representation into floating point representation so fractions are not lost. Explicit type conversions are either indicated by writing additional code (e. g. adding type identifiers or calling built in routines) or by coding conversion routines for the compiler to use when it otherwise would halt with a type mismatch. In most ALGOL like languages, such as Pascal, Modula 2, Ada and Delphi, conversion and casting are distinctly different concepts. In these languages, conversion refers to either implicitly or explicitly changing a value from one data type storage format to another, e. g. a 16 bit integer to a 32 bit integer. The storage needs may change as a result of the conversion, including a possible loss of precision or truncation. The word cast, on the other hand, refers to explicitly changing the interpretation of the bit pattern representing a value from one type to another. For example, 32 contiguous bits may be treated as an array of 32 booleans, a 4 byte string, an unsigned 32 bit integer or an IEEE single precision floating point value. Because the stored bits are never changed, the programmer must know low level details such as representation format, byte order, and alignment needs, to meaningfully cast. In the C family of languages and ALGOL 68, the word cast typically refers to an explicit type conversion (as opposed to an implicit conversion), causing some ambiguity about whether this is a re interpretation of a bit pattern or a real data representation conversion. More important is the multitude of ways and rules that apply to what data type (or class) is located by a pointer and how a pointer may be adjusted by the compiler in cases like object (class) inheritance.
Эда
Ada предоставляет универсальную библиотечную функцию Unchecked Conversion.
Неявный отлив с использованием немаркированных соединений
Многие языки программирования поддерживают объединения, которые могут хранить значение нескольких типов. Немаркированные объединения предоставляются в некоторых языках со слабой проверкой типов, таких как C и PL/I, а также в оригинальном Pascal. Их можно использовать для интерпретации битового представления одного типа как значения другого типа.
Вопросы безопасности
В хакерстве, приведение типов — это злоупотребление преобразованием типов для временного изменения типа данных переменной от того, как он был изначально определён. Это предоставляет возможности для злоумышленников, поскольку после приведения типа переменной к другому типу данных, компилятор будет рассматривать эту переменную как новый тип данных для данной конкретной операции.