fbpx
Wikipedia

Type conversion

In computer science, type conversion,[1][2] type casting,[1][3] type coercion,[3] and type juggling[4][5] 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,[1][6] 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.[6][7] 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.

Explicit casting in various languages Edit

Ada Edit

Ada provides a generic library function Unchecked_Conversion.[8]

C-like languages Edit

Implicit type conversion Edit

Implicit type conversion, also known as coercion or type juggling, is an automatic type conversion by the compiler. Some programming languages allow compilers to provide coercion; others require it.

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 converting representations from floating-point to integer, as the fractional components of the floating-point values will be truncated (rounded toward zero). Conversely, precision can be lost when converting representations from integer to floating-point, since a floating-point type may be unable to exactly represent all possible values of some integer type. 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(void) {  int i_value = 16777217;  float f_value = 16777216.0;  printf("The integer is: %d\n", i_value);  printf("The float is: %f\n", f_value);  printf("Their equality: %d\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 this peculiar print-out:

The integer is: 16777217 The float is: 16777216.000000 Their equality: 1 

Note that 1 represents equality in the last line above. This odd behavior is caused by an implicit conversion of i_value to float when it is compared with f_value. The conversion causes loss of precision, which makes the values equal before the comparison.

Important takeaways:

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

One special case of implicit type conversion is type promotion, where an object is automatically converted into another data type representing a superset of the original type. Promotions are commonly used with types smaller than the native type of the target platform's arithmetic logic unit (ALU), before arithmetic and logical operations, 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.

In Java:

int x = 3; double y = 3.5; System.out.println(x + y); // The output will be 6.5 

Explicit type conversion Edit

Explicit type conversion, also called type casting, is a type conversion which is explicitly defined within a program (instead of being done automatically according to the rules of the language for implicit type conversion). It is requested by the user in the program.

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 with "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.

C# and C++ Edit

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

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 

In C++ a similar effect can be achieved using C++-style cast syntax.

Animal* animal = new Cat; Bulldog* b = static_cast<Bulldog*>(animal); // compiles only if either Animal or Bulldog is derived from the other (or same) b = dynamic_cast<Bulldog*>(animal); // if (animal is Bulldog), b = (Bulldog*) animal, else b = nullptr Bulldog& br = static_cast<Bulldog&>(*animal); // same as above, but an exception will be thrown if a nullptr was to be returned  // this is not seen in code where exception handling is avoided delete animal; // always free resources animal = nullptr; b = dynamic_cast<Bulldog*>(animal); // b == nullptr 

Eiffel Edit

In Eiffel the notion of type conversion is integrated into the rules of the type system. The Assignment Rule says that an assignment, such as:

x := y 

is valid if and only if the type of its source expression, y in this case, is compatible with the type of its target entity, x in this case. In this rule, compatible with means that the type of the source expression either conforms to or converts to that of the target. Conformance of types is defined by the familiar rules for polymorphism in object-oriented programming. For example, in the assignment above, the type of y conforms to the type of x if the class upon which y is based is a descendant of that upon which x is based.

Definition of type conversion in Eiffel Edit

The actions of type conversion in Eiffel, specifically converts to and converts from are defined as:

A type based on a class CU converts to a type T based on a class CT (and T converts from U) if either

CT has a conversion procedure using U as a conversion type, or
CU has a conversion query listing T as a conversion type

Example Edit

Eiffel is a fully compliant language for Microsoft .NET Framework. Before development of .NET, Eiffel already had extensive class libraries. Using the .NET type libraries, particularly with commonly used types such as strings, poses a conversion problem. Existing Eiffel software uses the string classes (such as STRING_8) from the Eiffel libraries, but Eiffel software written for .NET must use the .NET string class (System.String) in many cases, for example when calling .NET methods which expect items of the .NET type to be passed as arguments. So, the conversion of these types back and forth needs to be as seamless as possible.

 my_string: STRING_8 -- Native Eiffel string  my_system_string: SYSTEM_STRING -- Native .NET string  ...  my_string := my_system_string 

In the code above, two strings are declared, one of each different type (SYSTEM_STRING is the Eiffel compliant alias for System.String). Because System.String does not conform to STRING_8, then the assignment above is valid only if System.String converts to STRING_8.

The Eiffel class STRING_8 has a conversion procedure make_from_cil for objects of type System.String. Conversion procedures are also always designated as creation procedures (similar to constructors). The following is an excerpt from the STRING_8 class:

 class STRING_8  ...  create  make_from_cil  ...  convert  make_from_cil ({SYSTEM_STRING})  ... 

The presence of the conversion procedure makes the assignment:

 my_string := my_system_string 

semantically equivalent to:

 create my_string.make_from_cil (my_system_string) 

in which my_string is constructed as a new object of type STRING_8 with content equivalent to that of my_system_string.

To handle an assignment with original source and target reversed:

 my_system_string := my_string 

the class STRING_8 also contains a conversion query to_cil which will produce a System.String from an instance of STRING_8.

 class STRING_8  ...  create  make_from_cil  ...  convert  make_from_cil ({SYSTEM_STRING})  to_cil: {SYSTEM_STRING}  ... 

The assignment:

 my_system_string := my_string 

then, becomes equivalent to:

 my_system_string := my_string.to_cil 

In Eiffel, the setup for type conversion is included in the class code, but then appears to happen as automatically as explicit type conversion in client code. The includes not just assignments but other types of attachments as well, such as argument (parameter) substitution.

Rust Edit

Rust provides no implicit type conversion (coercion) between primitive types. But, explicit type conversion (casting) can be performed using the as keyword.[10]

println!("1000 as a u16 is: {}", 1000 as u16); 

Implicit casting using untagged unions Edit

Many programming languages support union types which can hold a value of multiple types. Untagged unions are provided in some languages with loose type-checking, such as C and PL/I, but also in the original Pascal. These can be used to interpret the bit pattern of one type as a value of another type.

Security issues Edit

In hacking, typecasting is the misuse of type conversion to temporarily change a variable's data type from how it was originally defined.[11] This provides opportunities for hackers since in type conversion after a variable is "typecast" to become a different data type, the compiler will treat that hacked variable as the new data type for that specific operation.[12]

See also Edit

References Edit

  1. ^ a b c Mehrotra, Dheeraj (2008). S. Chand's Computer Science. S. Chand. pp. 81–83. ISBN 978-8121929844.
  2. ^ Programming Languages - Design and Constructs. Laxmi Publications. 2013. p. 35. ISBN 978-9381159415.
  3. ^ a b Reilly, Edwin (2004). Concise Encyclopedia of Computer Science. John Wiley & Sons. pp. 82, 110. ISBN 0470090952.
  4. ^ Fenton, Steve (2017). Pro TypeScript: Application-Scale JavaScript Development. Apress. pp. xxiii. ISBN 978-1484232491.
  5. ^ "PHP: Type Juggling - Manual". php.net. Retrieved 27 January 2019.
  6. ^ a b Olsson, Mikael (2013). C++ Quick Syntax Reference. Apress. pp. 87–89. ISBN 978-1430262770.
  7. ^ Kruse, Rudolf; Borgelt, Christian; Braune, Christian; Mostaghim, Sanaz; Steinbrecher, Matthias (16 September 2016). Computational Intelligence: A Methodological Introduction. Springer. p. 269. ISBN 978-1447172963.
  8. ^ "Unchecked Type Conversions". Ada Information Clearinghouse. Retrieved 11 March 2023.
  9. ^ Mössenböck, Hanspeter (25 March 2002). "Advanced C#: Checked Type Casts" (PDF). Institut für Systemsoftware, Johannes Kepler Universität Linz, Fachbereich Informatik. p. 5. Retrieved 4 August 2011. at C# Tutorial
  10. ^ "Casting - Rust By Example". doc.rust-lang.org.
  11. ^ Jon Erickson Hacking, 2nd Edition: The Art of Exploitation 2008 1593271441 p51 "Typecasting is simply a way to temporarily change a variable's data type, despite how it was originally defined. When a variable is typecast into a different type, the compiler is basically told to treat that variable as if it were the new data type, but only for that operation. The syntax for typecasting is as follows: (typecast_data_type) variable ..."
  12. ^ Arpita Gopal Magnifying C 2009 8120338618 p. 59 "From the above, it is clear that the usage of typecasting is to make a variable of one type, act like another type for one single operation. So by using this ability of typecasting it is possible for create ASCII characters by typecasting integer to its ..."

External links Edit

  • Casting in Ada
  • Casting in C++
  • Why I hate C++ Cast Operators, by Danny Kalev
  • Casting in Java
  • Implicit Conversions in C#
  • Implicit Type Casting at Cppreference.com
  • Static and Reinterpretation castings in C++
  • Upcasting and Downcasting in F#

type, conversion, aviation, licensing, process, aviation, metal, casting, casting, metalworking, upcasting, this, article, multiple, issues, please, help, improve, discuss, these, issues, talk, page, learn, when, remove, these, template, messages, this, articl. For the aviation licensing process see Type conversion aviation For metal casting see Casting metalworking Upcasting This article has multiple issues Please help improve it or discuss these issues on the talk page Learn how and when to remove these template messages This article needs additional citations for verification Please help improve this article by adding citations to reliable sources Unsourced material may be challenged and removed Find sources Type conversion news newspapers books scholar JSTOR May 2011 Learn how and when to remove this template message This article possibly contains original research Please improve it by verifying the claims made and adding inline citations Statements consisting only of original research should be removed May 2018 Learn how and when to remove this template message Learn how and when to remove this template message In computer science type conversion 1 2 type casting 1 3 type coercion 3 and type juggling 4 5 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 1 6 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 6 7 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 Contents 1 Explicit casting in various languages 1 1 Ada 1 2 C like languages 1 2 1 Implicit type conversion 1 2 1 1 Type promotion 1 2 2 Explicit type conversion 1 3 C and C 1 4 Eiffel 1 4 1 Definition of type conversion in Eiffel 1 4 2 Example 1 5 Rust 2 Implicit casting using untagged unions 3 Security issues 4 See also 5 References 6 External linksExplicit casting in various languages EditAda Edit Ada provides a generic library function Unchecked Conversion 8 C like languages Edit Implicit type conversion Edit Implicit type conversion also known as coercion or type juggling is an automatic type conversion by the compiler Some programming languages allow compilers to provide coercion others require it 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 gt i d i if i gt 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 converting representations from floating point to integer as the fractional components of the floating point values will be truncated rounded toward zero Conversely precision can be lost when converting representations from integer to floating point since a floating point type may be unable to exactly represent all possible values of some integer type For example span class kt float span 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 lt stdio h gt int main void int i value 16777217 float f value 16777216 0 printf The integer is d n i value printf The float is f n f value printf Their equality d 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 this peculiar print out The integer is 16777217 The float is 16777216 000000 Their equality 1 Note that 1 represents equality in the last line above This odd behavior is caused by an implicit conversion of span class n i value span to float when it is compared with span class n f value span The conversion causes loss of precision which makes the values equal before the comparison Important takeaways span class kt float span to span class kt int span causes truncation i e removal of the fractional part span class kt double span to span class kt float span causes rounding of digit span class kt long span to span class kt int span causes dropping of excess higher order bits Type promotion Edit One special case of implicit type conversion is type promotion where an object is automatically converted into another data type representing a superset of the original type Promotions are commonly used with types smaller than the native type of the target platform s arithmetic logic unit ALU before arithmetic and logical operations 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 In Java int x 3 double y 3 5 System out println x y The output will be 6 5 Explicit type conversion Edit Explicit type conversion also called type casting is a type conversion which is explicitly defined within a program instead of being done automatically according to the rules of the language for implicit type conversion It is requested by the user in the program 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 with 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 C and C Edit In C type conversion can be made in a safe or unsafe i e C like manner the former called checked type cast 9 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 In C a similar effect can be achieved using C style cast syntax Animal animal new Cat Bulldog b static cast lt Bulldog gt animal compiles only if either Animal or Bulldog is derived from the other or same b dynamic cast lt Bulldog gt animal if animal is Bulldog b Bulldog animal else b nullptr Bulldog amp br static cast lt Bulldog amp gt animal same as above but an exception will be thrown if a nullptr was to be returned this is not seen in code where exception handling is avoided delete animal always free resources animal nullptr b dynamic cast lt Bulldog gt animal b nullptr Eiffel Edit In Eiffel the notion of type conversion is integrated into the rules of the type system The Assignment Rule says that an assignment such as x y is valid if and only if the type of its source expression y in this case is compatible with the type of its target entity x in this case In this rule compatible with means that the type of the source expression either conforms to or converts to that of the target Conformance of types is defined by the familiar rules for polymorphism in object oriented programming For example in the assignment above the type of y conforms to the type of x if the class upon which y is based is a descendant of that upon which x is based Definition of type conversion in Eiffel Edit The actions of type conversion in Eiffel specifically converts to and converts from are defined as A type based on a class CU converts to a type T based on a class CT and T converts from U if either CT has a conversion procedure using U as a conversion type or CU has a conversion query listing T as a conversion type Example Edit Eiffel is a fully compliant language for Microsoft NET Framework Before development of NET Eiffel already had extensive class libraries Using the NET type libraries particularly with commonly used types such as strings poses a conversion problem Existing Eiffel software uses the string classes such as STRING 8 from the Eiffel libraries but Eiffel software written for NET must use the NET string class System String in many cases for example when calling NET methods which expect items of the NET type to be passed as arguments So the conversion of these types back and forth needs to be as seamless as possible my string STRING 8 Native Eiffel string my system string SYSTEM STRING Native NET string my string my system string In the code above two strings are declared one of each different type SYSTEM STRING is the Eiffel compliant alias for System String Because System String does not conform to STRING 8 then the assignment above is valid only if System String converts to STRING 8 The Eiffel class STRING 8 has a conversion procedure make from cil for objects of type System String Conversion procedures are also always designated as creation procedures similar to constructors The following is an excerpt from the STRING 8 class class STRING 8 create make from cil convert make from cil SYSTEM STRING The presence of the conversion procedure makes the assignment my string my system string semantically equivalent to create my string make from cil my system string in which my string is constructed as a new object of type STRING 8 with content equivalent to that of my system string To handle an assignment with original source and target reversed my system string my string the class STRING 8 also contains a conversion query to cil which will produce a System String from an instance of STRING 8 class STRING 8 create make from cil convert make from cil SYSTEM STRING to cil SYSTEM STRING The assignment my system string my string then becomes equivalent to my system string my string to cil In Eiffel the setup for type conversion is included in the class code but then appears to happen as automatically as explicit type conversion in client code The includes not just assignments but other types of attachments as well such as argument parameter substitution Rust Edit Rust provides no implicit type conversion coercion between primitive types But explicit type conversion casting can be performed using the as keyword 10 println 1000 as a u16 is 1000 as u16 Implicit casting using untagged unions EditMany programming languages support union types which can hold a value of multiple types Untagged unions are provided in some languages with loose type checking such as C and PL I but also in the original Pascal These can be used to interpret the bit pattern of one type as a value of another type Security issues EditIn hacking typecasting is the misuse of type conversion to temporarily change a variable s data type from how it was originally defined 11 This provides opportunities for hackers since in type conversion after a variable is typecast to become a different data type the compiler will treat that hacked variable as the new data type for that specific operation 12 See also EditDowncasting Run time type information C dynamic cast and Java cast Type punningReferences Edit a b c Mehrotra Dheeraj 2008 S Chand s Computer Science S Chand pp 81 83 ISBN 978 8121929844 Programming Languages Design and Constructs Laxmi Publications 2013 p 35 ISBN 978 9381159415 a b Reilly Edwin 2004 Concise Encyclopedia of Computer Science John Wiley amp Sons pp 82 110 ISBN 0470090952 Fenton Steve 2017 Pro TypeScript Application Scale JavaScript Development Apress pp xxiii ISBN 978 1484232491 PHP Type Juggling Manual php net Retrieved 27 January 2019 a b Olsson Mikael 2013 C Quick Syntax Reference Apress pp 87 89 ISBN 978 1430262770 Kruse Rudolf Borgelt Christian Braune Christian Mostaghim Sanaz Steinbrecher Matthias 16 September 2016 Computational Intelligence A Methodological Introduction Springer p 269 ISBN 978 1447172963 Unchecked Type Conversions Ada Information Clearinghouse Retrieved 11 March 2023 Mossenbock Hanspeter 25 March 2002 Advanced C Checked Type Casts PDF Institut fur Systemsoftware Johannes Kepler Universitat Linz Fachbereich Informatik p 5 Retrieved 4 August 2011 at C Tutorial Casting Rust By Example doc rust lang org Jon Erickson Hacking 2nd Edition The Art of Exploitation 2008 1593271441 p51 Typecasting is simply a way to temporarily change a variable s data type despite how it was originally defined When a variable is typecast into a different type the compiler is basically told to treat that variable as if it were the new data type but only for that operation The syntax for typecasting is as follows typecast data type variable Arpita Gopal Magnifying C 2009 8120338618 p 59 From the above it is clear that the usage of typecasting is to make a variable of one type act like another type for one single operation So by using this ability of typecasting it is possible for create ASCII characters by typecasting integer to its External links EditCasting in Ada Casting in C C Reference Guide Why I hate C Cast Operators by Danny Kalev Casting in Java Implicit Conversions in C Implicit Type Casting at Cppreference com Static and Reinterpretation castings in C Upcasting and Downcasting in F Retrieved from https en wikipedia org w index php title Type conversion amp oldid 1178651181, wikipedia, wiki, book, books, library,

article

, read, download, free, free download, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, picture, music, song, movie, book, game, games.