W To date we have discussed elementary high level language programming and low level assembler programming, one of the benefits of C is the integration of both , this requires a revisit to 'C' to discover advanced features.
Number ranges and logical expression within C
Within C we have seen and used various type functions i.e. int, char, Boolean, float. These types are limited in storage size, consider the following example.
Example
Write a program to input two integer numbers and display the addition.
Answer
#include stdio.h
void main()
{
/*Author : Mr James Mc Carren
Company: Staffordshire University
Date: 26th August 2012
Version 1.0
Function : To add two integers numbers together
Modifications: none*/
char prompt;
short int a,b;
printf("Please enter in number 1 : ");
scanf("%d",&a);
printf("\n\rPlease enter in number 2 :");
scanf("%d",&b);
printf("\n\r The total of %d + %d is %d",a,b,a+b);
printf("Press any key to exit \n\r");
scanf("\n%c",&prompt);
}
If we enter in the following numbers
Number 1 40000
Number 2 50000
The program produces
Please enter in number 1 : 40000
Please enter in number 2 : 50000
The total of -25536 +-15536 is 24464
There appears to be a limit on the maximum number stored in a integer variable. This is true for all the variables used so far i.e
Char 127 to -128
int 32767 to -32768
float 3.40282347e+38 to 1.17549435e-38
To extend these ranges we can use extended types i.e
long int 2147483647 to -2147483648
double 1.7976931348623157e+308 to 2.2250738585072014e-308
To extend the ranges even further we can use the unsigned type, this removes the sign space. This is commonly used in microprocessor development systems are hex/binary is rarely signed i.e.
unsigned char
unsigned int
unsigned float
unsigned double
unsigned long int
This is why when we cast data; it may not always work i.e trying to fit a float into a int, Because a float is physically bigger than an int . Coupled with this is a extended range of format commands i.e. %lx %ld ' long hex long decimal' %ux %ud ' unsigned long hex unsigned long int.