#include <stdio.h>
#include <limits.h>

int main() { 
	
	printf("%-20s%10s%10s%25s%25s%20s%20s\n", "C data type", "bytes", "bits", "Min value", "Max value", "Min val hex", "Max val hex");
	printf("-----------------------------------------------------------------------------------------\n");
	printf("%-20s%10lu%10lu%25d%25d%20hhX%20hhX\n", "char", sizeof(char), 8*sizeof(char), CHAR_MIN, CHAR_MAX, CHAR_MIN, CHAR_MAX);
	printf("%-20s%10lu%10lu%25d%25d%20hhX%20hhX\n", "unsigned char", sizeof(unsigned char), 8*sizeof(unsigned char), 0, UCHAR_MAX, 0, UCHAR_MAX);
	printf("\n");
	printf("%-20s%10lu%10lu%25d%25d%20hX%20hX\n", "short", sizeof(short), 8*sizeof(short), SHRT_MIN, SHRT_MAX, SHRT_MIN, SHRT_MAX);
	printf("%-20s%10lu%10lu%25d%25d%20hX%20hX\n", "unsigned short", sizeof(unsigned short), 8*sizeof(unsigned short), 0, USHRT_MAX, 0, USHRT_MAX);
	printf("\n");
	printf("%-20s%10lu%10lu%25d%25d%20X%20X\n", "int", sizeof(int), 8*sizeof(int), INT_MIN, INT_MAX, INT_MIN, INT_MAX);
	printf("%-20s%10lu%10lu%25d%25u%20X%20X\n", "unsigned", sizeof(unsigned), 8*sizeof(unsigned), 0, UINT_MAX, 0, UINT_MAX);
	printf("\n");
	printf("%-20s%10lu%10lu%25ld%25ld%20lX%20lX\n", "long", sizeof(long), 8*sizeof(long), LONG_MIN, LONG_MAX, LONG_MIN, LONG_MAX);
	printf("%-20s%10lu%10lu%25lu%25lu%20lX%20lX\n", "unsigned long", sizeof(unsigned long), 8*sizeof(unsigned long), 0L, ULONG_MAX, 0L, ULONG_MAX);

	printf("TAKE-HOME: Signed and unsigned integers use the larger parts of the ranges to encode negative and large positive values respectively\n");
	printf("TAPPS: What happens if we add one to the max value for each of these data types?\n");

	return 0;  
}

