Type conversion

Type conversion

In computer science, type conversion, typecasting, and coercion refers to different ways of, implicitly or explicitly, changing an entity of one data type into another. This is done to take advantage of certain features of type hierarchies or type representations. One example would be small integers, which can be stored in a compact format and converted to a larger representation when used in arithmetic computations. In object-oriented programming, type conversion allows programs to treat objects of one type as one of their ancestor types to simplify interacting with them.

Each programming language has its own rules on how types can be converted. In general, both objects and fundamental data types can be converted. In most languages, the word coercion is used to denote an implicit conversion, either during compilation or during run time. A typical example would be an expression mixing integer and floating point numbers (like 5 + 0.1), where the integers are normally converted into the latter. Explicit type conversions can either be performed via built-in routines (or a special syntax) or via separately defined conversion routines such as an overloaded object constructor.

In most Algol-based languages with nested function definitions, such as Ada, Delphi, Modula 2 and Pascal, conversion and casting are distinctly different concepts. In these languages, conversion refers to either implicitly or explicitly changing a value from one data type to another, e.g. a 16-bit integer to a 32-bit integer. The storage requirements may change as a result of the conversion. A loss of precision or truncation may also occur. 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 two character Unicode string, an unsigned 32-bit integer or an IEEE single precision floating point value. While the storage requirements are never changed, it still requires knowledge of low level details such as representation format, byte order, and alignment requirements in order to be meaningful.

In the C family of languages, the word cast typically refers to an explicit type conversion (as opposed to an implicit conversion), regardless of whether this is a re-interpretation of a bit-pattern or a real conversion.

Contents

C-like languages

Implicit type conversion

Implicit type conversion, also known as coercion, is an automatic type conversion by the compiler. Some languages allow, or even require, compilers to provide coercion.

In a mixed-type expression, data of one or more subtypes can be converted to a supertype as needed at runtime so that the program will run correctly. For example, the following is legal C language code:

double  d;
long    l;
int     i;
 
if (d > i)      d = i;
if (i > l)      l = i;
if (d == l)     d *= 2;

Although d, l and i belong to different data types, they will be automatically converted to equal data types each time a comparison or assignment is executed. This behavior should be used with caution, as unintended consequences can arise. Data can be lost when floating-point representations are converted to integer representations as the fractional components of the floating-point values will be truncated (rounded towards zero). Conversely, converting from an integer representation to a floating-point one can also lose precision, since the floating-point type may be unable to represent the integer exactly (for example, float might be an IEEE 754 single precision type, which cannot represent the integer 16777217 exactly, while a 32-bit integer type can). This can lead to unintuitive behavior, as demonstrated by the following code:

#include <stdio.h>
 
int main()
{
    int i_value   = 16777217;
    float f_value = 16777217.0;
    printf("The integer is: %i\n", i_value);
    printf("The float is:   %f\n", f_value);
    printf("Their equality: %i\n", i_value == f_value);
}

On compilers that implement floats as IEEE single precision, and ints as at least 32 bits, this code will give the peculiar result of printing out The integer is: 16777217, followed by The float is: 16777217.000000, then Their equality: 0 (where 1 represents equal). This odd behavior is caused by an implicit cast of i_value to float when it is compared with f_value; a cast which loses precision, making the values being compared different.

Following important points:

  1. float to int causes truncation, i.e. removal of the fractional part.
  2. double to float causes rounding of digit
  3. long int to int causes dropping of excess higher order bits.

Type promotion

One special case of implicit type conversion is type promotion, where the compiler automatically expands the binary representation of objects of integer or floating-point types. Promotions are commonly used with types smaller than the native type of the target platform's ALU prior to arithmetic and logical operations in order to make such operations possible, or more efficient if the ALU can work with more than one type. C and C++ perform such promotion for objects of boolean, character, wide character, enumeration, and short integer types which are promoted to int, and for objects of type float, which are promoted to double. Unlike some other type conversions, promotions never lose precision or modify the value stored in the object.

Explicit type conversion

Explicit type conversion is a type conversion which is explicitly defined within a program (instead of being done by a compiler for implicit type conversion).

double da = 3.3;
double db = 3.3;
double dc = 3.4;
int result = (int)da + (int)db + (int)dc; //result == 9
//if implicit conversion would be used (as if result = da + db + dc), result would be equal to 10

There are several kinds of explicit conversion.

checked
Before the conversion is performed, a runtime check is done to see if the destination type can hold the source value. If not, an error condition is raised.
unchecked
No check is performed. If the destination type cannot hold the source value, the result is undefined.
bit pattern
The raw bit representation of the source is copied verbatim, and it is re-interpreted according to the destination type. This can also be achieved via aliasing.

In object-oriented programming languages, objects can also be downcast : a reference of a base class is cast to one of its derived classes.

Using overloaded object constructor

class Myclass {
public:
    double myD;
    Myclass(double d) : myD(d) {};
};
 
int main(int argc, char *argv[])
{
    Myclass obj = 5.2; // here is the type conversion
    return 0;
}

C#

In C#, type conversion can be made in a safe or unsafe (i.e. C-like) manner, the former called checked type cast.[1]

Animal animal = new Cat();
 
Bulldog b = (Bulldog) animal;   // if (animal is Bulldog), stat.type(animal) is Bulldog, else an exception
b = animal as Bulldog;          // if (animal is Bulldog), b = (Bulldog) animal, else b = null
 
animal = null;
b = animal as Bulldog;          // b == null

See also

References

  1. ^ Mössenböck, Hanspeter (2002-03-25). "Advanced C#: Checked Type Casts". http://ssw.jku.at/Teaching/Lectures/CSharp/Tutorial/: Institut für Systemsoftware, Johannes Kepler Universität Linz, Fachbereich Informatik. p. 5. http://ssw.jku.at/Teaching/Lectures/CSharp/Tutorial/Part2.pdf. Retrieved 2011-08-04. 

External links


Wikimedia Foundation. 2010.

Игры ⚽ Поможем написать курсовую

Look at other dictionaries:

  • Conversion — may refer to: Contents 1 Economy and Finance 2 Law 3 Marketing 4 Religion 5 Sport …   Wikipedia

  • Type inference — Type inference, or implicit typing, refers to the ability to deduce automatically the type of a value in a programming language. It is a feature present in some strongly statically typed languages. It is often characteristic of but not limited to …   Wikipedia

  • Type punning — FORCETOC In computer science, type punning is a common term for any programming technique that subverts or circumvents the type system of a programming language in order to achieve an effect that would be difficult or impossible to achieve within …   Wikipedia

  • Conversion (logic) — Conversion is a concept in traditional logic referring to a type of immediate inference in which from a given proposition another proposition is inferred which has as its subject the predicate of the original proposition and as its predicate the… …   Wikipedia

  • Conversion De Type — Pour les articles homonymes, voir conversion. En informatique la conversion de type est le fait de convertir une valeur d un type (source) dans un autre (cible). On parle aussi de coercition ou de cast. On distingue trois types de conversion… …   Wikipédia en Français

  • CONVERSION — Selon sa signification étymologique, conversion (du latin, conversio ) signifie retournement, changement de direction. Le mot sert donc à désigner toute espèce de retournement ou de transposition. C’est ainsi qu’en logique le mot est employé pour …   Encyclopédie Universelle

  • Conversion therapy — Conversion therapy, sometimes called reparative therapy or reorientation therapy, is one type of sexual orientation change effort that attempts to change the sexual orientation of a person from homosexual or bisexual to heterosexual.[1] These… …   Wikipedia

  • Conversion disorder — Classification and external resources ICD 10 F44 ICD 9 300.11 …   Wikipedia

  • Type-Moon — (タイプムーン, Taipu Mūn?) es una compañía de juegos japonesa. Sus trabajos más destacados y por los que es más conocida son la novelas visuales Tsukihime, que realizó como un grupo de software doujin, y más tarde Fate/stay night. Ambos trabajos han… …   Wikipedia Español

  • Conversion a l'agriculture biologique — Conversion à l agriculture biologique Aujourd hui, de plus en plus d exploitations agricoles se convertissent à l agriculture biologique, plus respectueuse de l environnement que des modèles de production plus classiques. Cette agriculture… …   Wikipédia en Français

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”