======Project: Data Types====== A project for CSCS 1320 by Paul Sechrist during the Spring 2013. =====Objectives===== To show what the size of different data types are. Useful when running on a different system as well. =====Code===== ===Failed Program=== #include int main() { // signed char sclow, schigh; // sclow=((unsigned char)(0-1)./2)+1; // schigh=((unsigned char)(0-1)./2); // printf("low is %hhd, high is %hhd\n", sclow, schigh); //%hhu unsigned half half //%hu unsigned half int //%u unsigned int //%lu unsigned long int //%llu unsigned long long int //unsigned half half int unsigned char a=0; fprintf(stdout, "Before:\n-------\n"); fprintf(stdout, "a address: 0x%X\n",&a); fprintf(stdout, "a contains: %hhu\n",a); a=a-1; fprintf(stdout, "After:\n------\n"); fprintf(stdout, "a address: 0x%X\n",&a); fprintf(stdout, "a contain: %hhu\n",a); fprintf(stdout, "The size of an unsigned char is %hhu bytes\n",sizeof(a)); //unsigned half int unsigned short int b=0; fprintf(stdout, "Before:\n-------\n"); fprintf(stdout, "b address: 0x%X\n",&b); fprintf(stdout, "b contains: %hu\n",b); b=b-1; fprintf(stdout, "After:\n------\n"); fprintf(stdout, "b address: 0x%X\n",&b); fprintf(stdout, "b contain: %hu\n",b); fprintf(stdout, "The size of an unsigned short int is %hu bytes\n",sizeof(b)); //unsigned int unsigned int c=0; fprintf(stdout, "Before:\n-------\n"); fprintf(stdout, "c address: 0x%X\n",&c); fprintf(stdout, "c contains: %u\n",c); c=c-1; fprintf(stdout, "After:\n------\n"); fprintf(stdout, "c address: 0x%X\n",&c); fprintf(stdout, "c contain: %u\n",c); fprintf(stdout, "The size of an unsigned int is %u bytes\n",sizeof(c)); //unsigned long int unsigned long int d=0; fprintf(stdout, "Before:\n-------\n"); fprintf(stdout, "d address: 0x%X\n",&d); fprintf(stdout, "d contains: %lu\n",d); d=d-1; fprintf(stdout, "After:\n------\n"); fprintf(stdout, "d address: 0x%X\n",&d); fprintf(stdout, "d contain: %lu\n",d); fprintf(stdout, "The size of an unsigned long int is %lu bytes\n",sizeof(d)); //unsigned long long int unsigned long long int e=0; fprintf(stdout, "Before:\n-------\n"); fprintf(stdout, "e address: 0x%X\n",&e); fprintf(stdout, "e contains: %llu\n",e); fprintf(stdout, "The size of an unsigned long long int is %llu bytes\n",sizeof(e)); //signed half half int signed char f=0; fprintf(stdout, "Before:\n-------\n"); fprintf(stdout, "f address: 0x%X\n",&f); fprintf(stdout, "f contains: %hhd\n",f); f=f-1; fprintf(stdout, "After:\n------\n"); fprintf(stdout, "f address: 0x%X\n",&f); fprintf(stdout, "f contain: %hhd\n",f); fprintf(stdout, "The size of an signed char is %hhd bytes\n",sizeof(f)); //signed half int signed short int g=0; fprintf(stdout, "Before:\n-------\n"); fprintf(stdout, "g address: 0x%X\n",&g); fprintf(stdout, "g contains: %hd\n",g); g=g-1; fprintf(stdout, "After:\n------\n"); fprintf(stdout, "g address: 0x%X\n",&g); fprintf(stdout, "g contain: %hd\n",g); fprintf(stdout, "The size of an signed short int is %hd bytes\n",sizeof(g)); //signed int signed int h=0; fprintf(stdout, "Before:\n-------\n"); fprintf(stdout, "h address: 0x%X\n",&h); fprintf(stdout, "h contains: %d\n",h); h=h-1; fprintf(stdout, "After:\n------\n"); fprintf(stdout, "h address: 0x%X\n",&h); fprintf(stdout, "h contain: %d\n",h); fprintf(stdout, "The size of an signed int is %d bytes\n",sizeof(h)); //signed long int signed long int i=0; fprintf(stdout, "Before:\n-------\n"); fprintf(stdout, "i address: 0x%X\n",&i); fprintf(stdout, "i contains: %ld\n",i); i=i-1; fprintf(stdout, "After:\n------\n"); fprintf(stdout, "i address: 0x%X\n",&i); fprintf(stdout, "i contain: %ld\n",i); fprintf(stdout, "The size of an signed long int is %ld bytes\n",sizeof(i)); //signed long long int signed long long int j=0; fprintf(stdout, "Before:\n-------\n"); fprintf(stdout, "j address: 0x%X\n",&j); fprintf(stdout, "j contains: %lld\n",j); j=j-1; fprintf(stdout, "After:\n------\n"); fprintf(stdout, "j address: 0x%X\n",&j); fprintf(stdout, "j contain: %lld\n",j); fprintf(stdout, "The size of an signed long long int is %lld bytes\n",sizeof(j)); return(0); } ===Successful Program=== #include int main() { // signed char sclow, schigh; // sclow=((unsigned char)(0-1)./2)+1; // schigh=((unsigned char)(0-1)./2); // printf("low is %hhd, high is %hhd\n", sclow, schigh); //%hhu unsigned half half //%hu unsigned half int //%u unsigned int //%lu unsigned long int //%llu unsigned long long int //%hhd signed half half int //%hd signed half int //%d signed int //%ld signed long int //%lld signed long long int // Variable declarations // 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; // Find the max value for a signed char (half of the max of an unsigned char) // sc = ((unsigned char)(uc-1)/2) + 1; ssi = ((unsigned short int)(usi-1)/2) + 1; si = ((unsigned int)(ui-1)/2) + 1; sli = ((unsigned long int)(uli-1)/2) + 1; slli = ((unsigned long long int)(ulli-1)/2) + 1; fprintf(stdout, "TYPE: unsigned char\n-------------------\n"); fprintf(stdout, "\tsize: %hhu bytes\n", sizeof(unsigned char)); fprintf(stdout, "\t low: %hhu\n", uc); fprintf(stdout, "\thigh: %hhu\n", (uc-1)); // max of unsigned is 1 less than 0-- roll-over fprintf(stdout, "-------------------\n\n"); fprintf(stdout, "TYPE: signed char\n-------------------\n"); fprintf(stdout, "\tsize: %hhu bytes\n", sizeof(signed char)); fprintf(stdout, "\t low: %hhd\n", sc); fprintf(stdout, "\thigh: %hhd\n",(sc-1)); fprintf(stdout, "-------------------\n\n"); fprintf(stdout, "TYPE: unsigned short int\n-------------------\n"); fprintf(stdout, "\tsize: %hu bytes\n", sizeof(unsigned short int)); fprintf(stdout, "\t low: %hu\n", usi); fprintf(stdout, "\thigh: %hu\n", (usi-1)); // max of unsigned is 1 less than 0-- roll-over fprintf(stdout, "-------------------\n\n"); fprintf(stdout, "TYPE: signed short int\n-------------------\n"); fprintf(stdout, "\tsize: %hu bytes\n", sizeof(signed short int)); fprintf(stdout, "\t low: %hd\n", ssi); fprintf(stdout, "\thigh: %hd\n", (ssi-1)); fprintf(stdout, "-------------------\n\n"); fprintf(stdout, "TYPE: unsigned int\n-------------------\n"); fprintf(stdout, "\tsize: %u bytes\n", sizeof(unsigned int)); fprintf(stdout, "\t low: %u\n", ui); fprintf(stdout, "\thigh: %u\n", (ui-1)); // max of unsigned is 1 less than 0-- roll-over fprintf(stdout, "-------------------\n\n"); fprintf(stdout, "TYPE: signed int\n-------------------\n"); fprintf(stdout, "\tsize: %u bytes\n", sizeof(signed int)); fprintf(stdout, "\t low: %d\n", si); fprintf(stdout, "\thigh: %d\n", (si-1)); fprintf(stdout, "-------------------\n\n"); fprintf(stdout, "TYPE: unsigned long int\n-------------------\n"); fprintf(stdout, "\tsize: %lu bytes\n", sizeof(unsigned long int)); fprintf(stdout, "\t low: %lu\n", uli); fprintf(stdout, "\thigh: %lu\n", (uli-1)); // max of unsigned is 1 less than 0-- roll-over fprintf(stdout, "-------------------\n\n"); fprintf(stdout, "TYPE: signed long int\n-------------------\n"); fprintf(stdout, "\tsize: %lu bytes\n", sizeof(signed long int)); fprintf(stdout, "\t low: %ld\n", sli); fprintf(stdout, "\thigh: %ld\n", (sli-1)); fprintf(stdout, "-------------------\n\n"); fprintf(stdout, "TYPE: unsigned long long int\n-------------------\n"); fprintf(stdout, "\tsize: %llu bytes\n", sizeof(unsigned long long int)); fprintf(stdout, "\t low: %llu\n", ulli); fprintf(stdout, "\thigh: %llu\n", (ulli-1)); // max of unsigned is 1 less than 0-- roll-over fprintf(stdout, "-------------------\n\n"); fprintf(stdout, "TYPE: signed long long int\n-------------------\n"); fprintf(stdout, "\tsize: %llu bytes\n", sizeof(signed long long int)); fprintf(stdout, "\t low: %lld\n", slli); fprintf(stdout, "\thigh: %lld\n", (slli-1)); fprintf(stdout, "-------------------\n\n"); return(0); } =====Execution===== ====Incorrect Table==== lab46:~/src$ ./datasize Before: ------- a address: 0xEE61379F a contains: 0 After: ------ a address: 0xEE61379F a contain: 255 The size of an unsigned char is 1 bytes Before: ------- b address: 0xEE61379C b contains: 0 After: ------ b address: 0xEE61379C b contain: 65535 The size of an unsigned short int is 2 bytes Before: ------- c address: 0xEE613798 c contains: 0 After: ------ c address: 0xEE613798 c contain: 4294967295 The size of an unsigned int is 4 bytes Before: ------- d address: 0xEE613790 d contains: 0 After: ------ d address: 0xEE613790 d contain: 18446744073709551615 The size of an unsigned long int is 8 bytes Before: ------- e address: 0xEE613788 e contains: 0 After: ------ e address: 0xEE613788 e contain: 18446744073709551615 The size of an unsigned long long int is 8 bytes Before: ------- f address: 0xEE613787 f contains: 0 After: ------ f address: 0xEE613787 f contain: -1 The size of an signed char is 1 bytes Before: ------- g address: 0xEE613784 g contains: 0 After: ------ g address: 0xEE613784 g contain: -1 The size of an signed short int is 2 bytes Before: ------- h address: 0xEE613780 h contains: 0 After: ------ h address: 0xEE613780 h contain: -1 The size of an signed int is 4 bytes Before: ------- i address: 0xEE613778 i contains: 0 After: ------ i address: 0xEE613778 i contain: -1 The size of an signed long int is 8 bytes Before: ------- j address: 0xEE613770 j contains: 0 After: ------ j address: 0xEE613770 j contain: -1 The size of an signed long long int is 8 bytes lab46:~/src$ ==== Correct Table ==== lab46:~/src$ ./datasize2 TYPE: unsigned char ------------------- size: 1 bytes low: 0 high: 255 ------------------- TYPE: signed char ------------------- size: 1 bytes low: -128 high: 127 ------------------- TYPE: unsigned short int ------------------- size: 2 bytes low: 0 high: 65535 ------------------- TYPE: signed short int ------------------- size: 2 bytes low: -32768 high: 32767 ------------------- TYPE: unsigned int ------------------- size: 4 bytes low: 0 high: 4294967295 ------------------- TYPE: signed int ------------------- size: 4 bytes low: -2147483648 high: 2147483647 ------------------- TYPE: unsigned long int ------------------- size: 8 bytes low: 0 high: 18446744073709551615 ------------------- TYPE: signed long int ------------------- size: 8 bytes low: -9223372036854775808 high: 9223372036854775807 ------------------- TYPE: unsigned long long int ------------------- size: 8 bytes low: 0 high: 18446744073709551615 ------------------- TYPE: signed long long int ------------------- size: 8 bytes low: -9223372036854775808 high: 9223372036854775807 ------------------- lab46:~/src$ =====Reflection===== Along with the problems with the original program, the fixed program had an initial issue of the highs and lows of the signed. I simply moved some code around to make it output correctly. =====Reference===== * [[http://lab46.corning-cc.edu/haas/spring2013/common/datatyperanges|Matt's Example Code]]