A project for CSCS 2330 by Paul Sechrist during the Spring 2013.
Play with data type size example, experiment with it a little.
#include <stdio.h> #include <stdlib.h> int main() { /* Data Types Size %hhd Signed char 1 %hhu unsigned char 1 %hd signed short int 2 %hu unsigned short int 2 %d signed int 4 %u unsigned int 4 %ld signed long int 8 %lu unsigned long int 8 %llu signed long long int 8 %llu unsigned long long int 8 %f float 0 %lf double 0 %llf long double 0 */ signed char sc=0; unsigned char uc=0; signed short int ssi=0; unsigned short int usi=0; signed int si=0; unsigned int ui=0; signed long int sli=0; unsigned long int uli=0; signed long long int slli=0; unsigned long long int ulli=0; float f=0; double d=0; long double ld=0; fprintf(stdout, "a signed char is %hhu bytes \n", sizeof(sc)); fprintf(stdout, "lower bound is: %hhd\n", ((unsigned char)(sc-1)/2)+1); fprintf(stdout, "upper bound is: %hhd \n", ((unsigned char)(sc-1)/2)); fprintf(stdout, "----------------------------\n"); fprintf(stdout, "an unsigned char is %hhu bytes\n", sizeof(uc)); fprintf(stdout, "lower bound is: %hhu\n", uc); fprintf(stdout, "upper bound is: %hhu\n", uc-1); fprintf(stdout, "----------------------------\n"); fprintf(stdout, "a signed short int is %hd bytes \n", sizeof(ssi)); fprintf(stdout, "lower bound is: %hd\n", ((unsigned short int)(ssi-1)/2)+1); fprintf(stdout, "upper bound is: %hd \n", ((unsigned short int)(ssi-1)/2)); fprintf(stdout, "----------------------------\n"); fprintf(stdout, "an unsigned short int is %hu bytes\n", sizeof(usi)); fprintf(stdout, "lower bound is: %hu\n", usi); fprintf(stdout, "upper bound is: %hu\n", usi-1); fprintf(stdout, "----------------------------\n"); fprintf(stdout, "a signed int is %d bytes \n", sizeof(si)); fprintf(stdout, "lower bound is: %d\n", ((unsigned int)(si-1)/2)+1); fprintf(stdout, "upper bound is: %d \n", ((unsigned int)(si-1)/2)); fprintf(stdout, "----------------------------\n"); fprintf(stdout, "an unsigned int is %u bytes\n", sizeof(ui)); fprintf(stdout, "lower bound is: %u\n", ui); fprintf(stdout, "upper bound is: %u\n", ui-1); fprintf(stdout, "----------------------------\n"); fprintf(stdout, "a signed long int is %ld bytes \n", sizeof(sli)); fprintf(stdout, "lower bound is: %ld\n", ((unsigned long int)(sli-1)/2)+1); fprintf(stdout, "upper bound is: %ld \n", ((unsigned long int)(sli-1)/2)); fprintf(stdout, "----------------------------\n"); fprintf(stdout, "an unsigned long int is %lu bytes\n", sizeof(uli)); fprintf(stdout, "lower bound is: %lu\n", uli); fprintf(stdout, "upper bound is: %lu\n", uli-1); fprintf(stdout, "----------------------------\n"); fprintf(stdout, "a signed long long int is %lld bytes \n", sizeof(slli)); fprintf(stdout, "lower bound is: %lld\n", ((unsigned long long int)(slli-1)/2)+1); fprintf(stdout, "upper bound is: %lld \n", ((unsigned long long int)(slli-1)/2)); fprintf(stdout, "----------------------------\n"); fprintf(stdout, "an unsigned long long int is %llu bytes\n", sizeof(ulli)); fprintf(stdout, "lower bound is: %llu\n", ulli); fprintf(stdout, "upper bound is: %llu\n", ulli-1); fprintf(stdout, "----------------------------\n"); fprintf(stdout, "a float is %f bytes \n", sizeof(f)); fprintf(stdout, "lower bound is: %f\n", ((float)(f-1)/2)+1); fprintf(stdout, "upper bound is: %f \n", ((float)(f-1)/2)); fprintf(stdout, "----------------------------\n"); fprintf(stdout, "an double is %lf bytes\n", sizeof(d)); fprintf(stdout, "lower bound is: %lf\n", d); fprintf(stdout, "upper bound is: %lf\n", d-1); fprintf(stdout, "----------------------------\n"); fprintf(stdout, "a long double is %llf bytes \n", sizeof(ld)); fprintf(stdout, "lower bound is: %llf\n", ((long double)(ld-1)/2)+1); fprintf(stdout, "upper bound is: %llf\n", ((long double)(ld-1)/2)); fprintf(stdout, "----------------------------\n"); return(0); }
lab46:~/src/datastructures/review$ ./fun a signed char is 1 bytes lower bound is: -128 upper bound is: 127 ---------------------------- an unsigned char is 1 bytes lower bound is: 0 upper bound is: 255 ---------------------------- a signed short int is 2 bytes lower bound is: -32768 upper bound is: 32767 ---------------------------- an unsigned short int is 2 bytes lower bound is: 0 upper bound is: 65535 ---------------------------- a signed int is 4 bytes lower bound is: -2147483648 upper bound is: 2147483647 ---------------------------- an unsigned int is 4 bytes lower bound is: 0 upper bound is: 4294967295 ---------------------------- a signed long int is 8 bytes lower bound is: -9223372036854775808 upper bound is: 9223372036854775807 ---------------------------- an unsigned long int is 8 bytes lower bound is: 0 upper bound is: 18446744073709551615 ---------------------------- a signed long long int is 8 bytes lower bound is: -9223372036854775808 upper bound is: 9223372036854775807 ---------------------------- an unsigned long long int is 8 bytes lower bound is: 0 upper bound is: 18446744073709551615 ---------------------------- a float is 0.000000 bytes lower bound is: 0.500000 upper bound is: -0.500000 ---------------------------- an double is 0.000000 bytes lower bound is: 0.000000 upper bound is: -1.000000 ---------------------------- a long double is 0.000000 bytes lower bound is: 0.500000 upper bound is: -0.500000 ---------------------------- lab46:~/src/datastructures/review$
Good way to review data types and C in general.
Matt's examples.