ref:
http://www.tutorialspoint.com/ansi_c/c_basic_datatypes.htm
C has a concept of 'data types' which are used to define a variable before its use. The definition of a variable will assign storage for the variable and define the type of data that will be held in the location.
The value of a variable can be changed any time.
C has the following basic built-in datatypes.
What this means is that a 'short int' should assign less than or the
same amount of storage as an 'int' and the 'int' should be less or the
same bytes than a 'long int'. What this means in the real world is:
These figures only apply to todays generation of PCs. Mainframes and
midrange machines could use different figures, but would still comply
with the rule above.
You can find out how much storage is allocated to a data type by using the sizeof operator discussed in Operator Types Session.
Here is an example to check size of memory taken by various datatypes.
const float pi=3.14159; Now pi cannot be changed at a later time within the program.
Another way to define constants is with the #define preprocessor which has the advantage that it does not use any storage
The volatile qualifier declares a data type that can have its value changed in ways outside the control or detection of the compiler (such as a variable updated by the system clock or by another program). This prevents the compiler from optimizing code referring to the object by storing the object's value in a register and re-reading it from there, rather than from memory, where it may have changed. You will use this qualifier once you will become expert in "C". So for now just proceed.
The square brackets mean subscripting; parentheses are used only for
function references. Array indexes begin at zero, so the elements of x
are:
Thus Array are special type of variables which can be used to store multiple values of same data type. Those values are stored and accessed using subscript or index.
Arrays occupy consecutive memory slots in the computer's memory.
If an array has n elements, the largest subscript is n-1.
Multiple-dimension arrays are provided. The declaration and use look like:
Subscripts can be arbitrary integer expressions. Multi-dimension
arrays are stored by row so the rightmost subscript varies fastest. In
above example name has 10 rows and 20 columns.
Same way, arrays can be defined for any data type. Text is usually kept as an array of characters. By convention in C, the last character in a character array should be a `\0' because most programs that manipulate character arrays expect it. For example, printf uses the `\0' to detect the end of a character array when printing it out with a `%s'.
Here is a program which reads a line, stores it in a buffer, and prints its length (excluding the newline at the end).
The number of initializers cannot be more than the number of elements
in the array but it can be less in which case, the remaining elements
are initialized to 0.if you like, the array size can be inferred from
the number of initializers by leaving the square brackets empty so these
are identical declarations:
An array of characters ie string can be initialized as follows:
The actual size of integer types varies by implementation. The
standard only requires size relations between the data types and minimum
sizes for each data type:
The relation requirements are that the
The minimum size for
The type
In practice it should be noted that
The actual size and behavior of floating-point types also vary by implementation. The only guarantee is that
http://www.tutorialspoint.com/ansi_c/c_basic_datatypes.htm
C has a concept of 'data types' which are used to define a variable before its use. The definition of a variable will assign storage for the variable and define the type of data that will be held in the location.
The value of a variable can be changed any time.
C has the following basic built-in datatypes.
- int
- float
- double
- char
int - data type
int is used to define integer numbers.{ int Count; Count = 5; } |
float - data type
float is used to define floating point numbers.{ float Miles; Miles = 5.6; } |
double - data type
double is used to define BIG floating point numbers. It reserves twice the storage for the number. On PCs this is likely to be 8 bytes.{ double Atoms; Atoms = 2500000; } |
char - data type
char defines characters.{ char Letter; Letter = 'x'; } |
Modifiers
The data types explained above have the following modifiers.- short
- long
- signed
- unsigned
short int <= int <= long int float <= double <= long double |
Type Bytes Range --------------------------------------------------------------------- |
short int 2 -32,768 -> +32,767 (32kb) unsigned short int 2 0 -> +65,535 (64Kb) unsigned int 4 0 -> +4,294,967,295 ( 4Gb) int 4 -2,147,483,648 -> +2,147,483,647 ( 2Gb) long int 4 -2,147,483,648 -> +2,147,483,647 ( 2Gb) signed char 1 -128 -> +127 unsigned char 1 0 -> +255 float 4 double 8 long double 12 |
You can find out how much storage is allocated to a data type by using the sizeof operator discussed in Operator Types Session.
Here is an example to check size of memory taken by various datatypes.
int main() { printf("sizeof(char) == %d\n", sizeof(char)); printf("sizeof(short) == %d\n", sizeof(short)); printf("sizeof(int) == %d\n", sizeof(int)); printf("sizeof(long) == %d\n", sizeof(long)); printf("sizeof(float) == %d\n", sizeof(float)); printf("sizeof(double) == %d\n", sizeof(double)); printf("sizeof(long double) == %d\n", sizeof(long double)); printf("sizeof(long long) == %d\n", sizeof(long long)); return 0; } |
Qualifiers
A type qualifier is used to refine the declaration of a variable, a function, and parameters, by specifying whether:- The value of a variable can be changed.
- The value of a variable must always be read from memory rather than from a register
- const
- volatile
const float pi=3.14159; Now pi cannot be changed at a later time within the program.
Another way to define constants is with the #define preprocessor which has the advantage that it does not use any storage
The volatile qualifier declares a data type that can have its value changed in ways outside the control or detection of the compiler (such as a variable updated by the system clock or by another program). This prevents the compiler from optimizing code referring to the object by storing the object's value in a register and re-reading it from there, rather than from memory, where it may have changed. You will use this qualifier once you will become expert in "C". So for now just proceed.
What are Arrays:
We have seen all baisc data types. In C language it is possible to make arrays whose elements are basic types. Thus we can make an array of 10 integers with the declaration.int x[10]; |
Thus Array are special type of variables which can be used to store multiple values of same data type. Those values are stored and accessed using subscript or index.
Arrays occupy consecutive memory slots in the computer's memory.
x[0], x[1], x[2], ..., x[9] |
Multiple-dimension arrays are provided. The declaration and use look like:
int name[10] [20]; n = name[i+j] [1] + name[k] [2]; |
Same way, arrays can be defined for any data type. Text is usually kept as an array of characters. By convention in C, the last character in a character array should be a `\0' because most programs that manipulate character arrays expect it. For example, printf uses the `\0' to detect the end of a character array when printing it out with a `%s'.
Here is a program which reads a line, stores it in a buffer, and prints its length (excluding the newline at the end).
main( ) { int n, c; char line[100]; n = 0; while( (c=getchar( )) != '\n' ) { if( n < 100 ) line[n] = c; n++; } printf("length = %d\n", n); } |
Array Initialization
- As with other declarations, array declarations can include an optional initialization
- Scalar variables are initialized with a single value
- Arrays are initialized with a list of values
- The list is enclosed in curly braces
int array [8] = {2, 4, 6, 8, 10, 12, 14, 16}; |
int array1 [8] = {2, 4, 6, 8, 10, 12, 14, 16}; int array2 [] = {2, 4, 6, 8, 10, 12, 14, 16}; |
char string[10] = "Hello";
#################################################
Basic types
The C language provides many basic types. Most of them are formed from one of the four basic arithmetic type specifiers in C (char
, int
, float
and double
), and optional specifiers (signed
, unsigned
, short
, long
). All available basic arithmetic types are listed below:Type | Explanation |
---|---|
char | smallest addressable unit of the machine that can contain basic character set. It is an integer type. Actual type can be either signed or unsigned depending on the implementation. |
signed char | same size as char , but guaranteed to be signed. |
unsigned char | same size as char , but guaranteed to be unsigned. |
short short int signed short signed short int |
short signed integer type. At least in the [−32767,+32767] range,[3] thus at least 16 bits in size. |
unsigned short unsigned short int |
same as short , but unsigned. |
int signed int |
basic signed integer type. At least in the [−32767,+32767] range,[3] thus at least 16 bits in size. |
unsigned unsigned int |
same as int , but unsigned. |
long long int signed long signed long int |
long signed integer type. At least in the [−2147483647,+2147483647] range,[3] thus at least 32 bits in size. |
unsigned long unsigned long int |
same as long , but unsigned. |
long long long long int signed long long signed long long int |
long long signed integer type. At least in the [−9223372036854775807,+9223372036854775807] range,[3] thus at least 64 bits in size. Specified since the C99 version of the standard. |
unsigned long long unsigned long long int |
same as long long , but unsigned. Specified since the C99 version of the standard. |
float | single precision floating-point type. Actual properties unspecified (except minimum limits), however on most systems this is the IEEE 754 single-precision binary floating-point format. This format is required by the optional Annex F "IEC 60559 floating-point arithmetic". |
double | double precision floating-point type. Actual properties unspecified (except minimum limits), however on most systems this is the IEEE 754 double-precision binary floating-point format. This format is required by the optional Annex F "IEC 60559 floating-point arithmetic". |
long double | extended precision floating-point type. Actual properties unspecified. Unlike types float and double, it can be either 80-bit floating point format, the non-IEEE "double-double" or IEEE 754 quadruple-precision floating-point format if a higher precision format is provided, otherwise it is the same as double. See the article on long double for details. |
The relation requirements are that the
long long
is not smaller than long
, which is not smaller than int
, which is not smaller than short
. As char
's size is always the minimum supported data type, all other data types can't be smaller.The minimum size for
char
is 8 bits, the minimum size for short
and int
is 16 bits, for long
it is 32 bits and long long
must contain at least 64 bits.The type
int
should be the integer type that the target
processor is most efficient working with. This allows great flexibility:
for example, all types can be 64-bit. However, several different
integer width schemes (data models) are popular. This is because the
data model defines how different programs communicate, a uniform data
model is used within a given operating system application interface.[4]In practice it should be noted that
char
is usually 8 bits in size and short
is usually 16 bits in size (as are their unsigned counterparts). This holds true for platforms as diverse as 1990s SunOS 4 Unix, Microsoft MS-DOS, modern Linux, and Microchip MCC18 for embedded 8 bit PIC microcontrollers. POSIX requires char
to be exactly 8 bits in size.The actual size and behavior of floating-point types also vary by implementation. The only guarantee is that
long double
is not smaller than double
, which is not smaller than float
. Usually, the 32-bit and 64-bit IEEE 754 binary floating-point formats are used, if supported by hardware.Boolean type
C99 added a boolean (true/false) type (_Bool
) which is defined in the <stdbool.h>
header. Additionally, the standard requires that macros are defined to alias the type as bool
as well as providing macros for true
and false
.Size and pointer difference types
The C language provides the separate typessize_t
and ptrdiff_t
to represent memory-related quantities. Existing types were deemed
insufficient, because their size is defined according to the target
processor's arithmetic capabilities, not the memory capabilities, such
as available address space. Both of these types are defined in the <stddef.h>
header (cstddef
header in C++).size_t
is used to represent the size of any object
(including arrays) in the particular implementation. It is used as the
return type of the sizeof
operator. The maximum size of size_t
is provided via SIZE_MAX
, a macro constant which is defined in the <stdint.h>
header (cstdint
header in C++). As an unsigned type, size_t
is guaranteed to be wide enough to accommodate at least the value of 65535. Signed sizes can be represented by ssize_t
, which is a POSIX extension.ptrdiff_t
is used to represent the difference between pointers.
No comments:
Post a Comment