#include <iostream>
#include <iomanip>
#include <string>
#include <limits>

using namespace std;

int main() {
	cout << "Size of bool: " << sizeof(bool) << " bytes" << endl;
	cout << "Size of int: " << sizeof(int) << " bytes" << endl;
	cout << "Range: -2,147,483,648 to 2,147,483,647 (signed) or 0 to 4,294,967,295 (unsigned)." << endl;
	cout << endl;
	cout << "Size of short: " << sizeof(short) << " bytes" << endl;
	cout << "Range: -32,768 to 32,767 (signed) or 0 to 65,535 (unsigned)" << endl;
	cout << endl;
	cout << "Size of long: " << sizeof(long) << " bytes" << endl;
	cout << "Size of long long: " << sizeof(long long) << " bytes" << endl;
	cout << "Range: -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 (signed) or 0 to 18,446,744,073,709,551,615" << endl;
	cout << endl;
	cout << "Size of char: " << sizeof(char) << " bytes" << endl;
	cout << "Size of string: " << sizeof(string) << " bytes" << endl;
	
	cout << "Size of float: " << sizeof(float) << " bytes" << endl;
	double max_float = numeric_limits<float>::max();
	cout << "Maximum double value: " << max_float << endl;
	cout << "As an integer: " << setprecision(0) << max_float << endl;

	cout << "Size of double: " << sizeof(double) << " bytes" << endl;
	double max_double = numeric_limits<double>::max();
	cout << "Maximum double value: " << max_double << endl;
	cout << "Size of long double: " << sizeof(long double) << " bytes" << endl;
	long double max_ld = numeric_limits<long double>::max();
	cout << "Maximum long double value: " << max_ld << endl;

	cout << "Max double value as an integer: " << setprecision(0) << fixed << max_double << endl;
	cout << "Max long double value as an integer: " << setprecision(0) << fixed << max_ld << endl;

	return 0;
}