ch3-SimpleCast (Implicit and explicit cast in C/C++)
Chapter_3 Exercise_3-14 Pitfall | StaticCast Exercise_3-15 |
SimpleCast TCP1, p. 180 (simplecast.c, SimpleCast.cpp)
simplecast.c download
#include <stdio.h> // for printf()
int main()
{
int i = 200;
unsigned long ul = (unsigned long int)i; // explicit cast
long long ll = i; // implicit cast from int to long long
unsigned char uc = ll; // implicit cast from long long to unsigned char
short sh = ll; // implicit cast (restrictive) from long long to short int
printf("sizeof(unsigned char) = %lu, sizeof(uc) = %lu\n",
sizeof(unsigned char), sizeof(uc));
printf("sizeof(short) = %lu, sizeof(sh) = %lu\n",
sizeof(short), sizeof(sh));
printf("sizeof(int) = %lu, sizeof(i) = %lu\n", sizeof(int), sizeof(i));
printf("sizeof(unsigned long) = %lu, sizeof(ul) = %lu\n",
sizeof(unsigned long), sizeof(ul));
printf("sizeof(long long) = %lu, sizeof(ll) = %lu\n",
sizeof(long long), sizeof(ll));
// Function call cast only works in C++:
// float f1 = float(200); // compile error in C
// This is equivalent to:
float f2 = (float)200; // C style cast
float f3 = 200.f; // 200f gives a compile error
float f4 = 200; // implicit cast from int to float
double d = f2; // implicit cast from float to double
long double ld = 200; // implicit cast from int to long double
float f5 = ld; // implicit cast (restrictive) from long double to float
printf("sizeof(float) = %lu, sizeof(f5) = %lu\n",
sizeof(float), sizeof(f5));
printf("sizeof(double) = %lu, sizeof(d) = %lu\n",
sizeof(double), sizeof(d));
printf("sizeof(long double) = %lu, sizeof(ld) = %lu\n",
sizeof(long double), sizeof(ld));
return 0;
}
/*
gcc simplecast.c -o simplecast
./simplecast
sizeof(unsigned char) = 1, sizeof(uc) = 1
sizeof(short) = 2, sizeof(sh) = 2
sizeof(int) = 4, sizeof(i) = 4
sizeof(unsigned long) = 8, sizeof(ul) = 8
sizeof(long long) = 8, sizeof(ll) = 8
sizeof(float) = 4, sizeof(f5) = 4
sizeof(double) = 8, sizeof(d) = 8
sizeof(long double) = 16, sizeof(ld) = 16
*/
SimpleCast.cpp download
#include <iostream>
using std::cout;
using std::endl;
int main()
{
int i = 200;
unsigned long ul = (unsigned long int)i; // explicit cast
long long ll = i; // implicit cast from int to long long
unsigned char uc = ll; // implicit cast from long long to unsigned char
short sh = ll; // implicit cast (restrictive) from long long to short int
cout << "sizeof(unsigned char) = " << sizeof(unsigned char)
<< ", sizeof(uc) = " << sizeof(uc) << endl;
cout << "sizeof(short) = " << sizeof(short)
<< ", sizeof(sh) = " << sizeof(sh) << endl;
cout << "sizeof(int) = " << sizeof(int)
<< ", sizeof(i) = " << sizeof(i) << endl;
cout << "sizeof(unsigned long) = " << sizeof(unsigned long)
<< ", sizeof(ul) = " << sizeof(ul) << endl;
cout << "sizeof(long long) = " << sizeof(long long)
<< ", sizeof(ll) = " << sizeof(ll) << endl;
float f1 = float(200); // C++ style cast, function call cast
// This is equivalent to:
float f2 = (float)200; // C style cast
float f3 = 200.f; // 200f gives a compile error
float f4 = 200; // implicit cast from int to float
double d = f1; // implicit cast from float to double
long double ld = 200; // implicit cast from int to long double
float f5 = ld; // implicit cast (restrictive) from long double to float
cout << "sizeof(float) = " << sizeof(float)
<< ", sizeof(f5) = " << sizeof(f5) << endl;
cout << "sizeof(double) = " << sizeof(double)
<< ", sizeof(d) = " << sizeof(d) << endl;
cout << "sizeof(long double) = " << sizeof(long double)
<< ", sizeof(ld) = " << sizeof(ld) << endl;
return 0;
}
/*
g++ SimpleCast.cpp -o SimpleCast
./SimpleCast
sizeof(unsigned char) = 1, sizeof(uc) = 1
sizeof(short) = 2, sizeof(sh) = 2
sizeof(int) = 4, sizeof(i) = 4
sizeof(unsigned long) = 8, sizeof(ul) = 8
sizeof(long long) = 8, sizeof(ll) = 8
sizeof(float) = 4, sizeof(f5) = 4
sizeof(double) = 8, sizeof(d) = 8
sizeof(long double) = 16, sizeof(ld) = 16
*/
Note: See also ch3-sizeof in Section ch3-Data_Types.
Chapter_3 Exercise_3-14 Pitfall | BACK_TO_TOP | StaticCast Exercise_3-15 |
Comments
Post a Comment