1
Fundamental Data Types
http://improvec.blogspot.in
2
Declaration
• All variables must be declared before
being used.
– Tells compiler to set aside an appropriate
amount of space in memory to hold a value.
– Enables the compiler to perform operations
using the declared variables.
http://improvec.blogspot.in
3
Basic Data Types
• char character
• int integer
• float floating-point
• double double floating-point
• void valueless
http://improvec.blogspot.in
4
Modifying the Basic Types
• Type modifier:
signed unsigned long short
• When a type modifier is used by itself, then int is
assumed.
Modifier Same As
signed signed int
unsigned unsigned int
long long int
short short int
http://improvec.blogspot.in
5
Data Type char
Have Seen:Chars are treated as small integers &
conversely small ints are treated as chars.
char c = ‘a’;
printf (“%c”, c + 1) b
printf (“%d”, c + 2) 99
Each char variable stored in 1 Byte 8 Bits:
27
26
25
24
23
22
21
20
128 64 32 16 8 4 2 1
a
0000110 1http://improvec.blogspot.in
6
• String of binary digits are called bit
strings.
• A bit string is interpreted as a binary
number. bnbn-1
……
b2b1b0
0 1 1 0 0 0 0 1 a
• This bit string has the value:
1×26
+ 1×25
+ 1×20
= 97http://improvec.blogspot.in
7
3 types:
1) char 2) unsigned char 3) signed char
Each uses 1 Byte.
Signed char -128 to 127
Unsigned char 0 to 255
http://improvec.blogspot.in
8
INTEGERS : Include the natural counting
numbers and their negatives.
INTEGRAL DATA TYPES:
int short long unsigned
Data Type int
http://improvec.blogspot.in
9
• The magnitude of the number that an int
variable can hold depends on
___________?
2 Byte word ~ -32 K To +32K
-215
, …, -3, -2, -1, 0, 1, 2, 3, …, 215
-1
4 Byte word ~ -2 Billion To +2 Billion
-231
, …. -3, -2, -1, 0, 1, 2, 3, …, 231
-1
word size(bits) of the machine is machine dependent
http://improvec.blogspot.in
10
• Integer overflow:
– Value too large for defined Storage Location.
– Typically program continues to run but
incorrect results.
– The programmer must strive at all times to
avoid integer overflow.
http://improvec.blogspot.in
11
Types short, long, unsigned
• short - used where conserving storage is a
concern (usually 2 Bytes).
-32 Thousand To +32 Thousand
-215
, -215
+1, …, -3, -2, -1, 0, 1, 2, 3, …, 215
-1
• long - needed for larger integers (usually 4
bytes).
-2 Billion To +2 Billion
31 31 31
http://improvec.blogspot.in
12
• Unsigned - no sign bit, same number
bytes as int.
The range, u, of values:
0 ≤ u ≤ 2wordsize
-1
2 Byte word ~ 0 To + 64 Thousand
0, 1, 2, 3, …, 216
-1
4 Byte word ~ 0 To + 4 Billion
0, 1, 2, 3, …, 232
-1http://improvec.blogspot.in
13
Suffix:
u - 20u
l – 20l
ul - 20ul
(case not significant)
IF no suffix with constant - system will choose the
first of : int - long - unsigned long
That can hold the value.
http://improvec.blogspot.in
14
float double long double
• Suffixes for constants
f or F float 3.7 F
l or L long double 3.7 L
• Any unsuffixed floating constant is of type
double (working type).
The Floating Types
http://improvec.blogspot.in
15
• Notation: exponential or decimal
Must have Exponent or Dec pt or Both.
1.234567e5 123456.7
1.234567e-3 0.001234567
0e0 correct 0.0
.e0 wrong
May not contain any blanks or special characters.
• Typical Storage: Float < Double
http://improvec.blogspot.in
16
Precision: The number of significant decimal
digits that floating value carries.
Range: Limits of largest & smallest possible
values that can be in a variable of that
type.
Float: 4 Bytes - about 6 decimal places of
accuracy- single precision.
Double: 8 Bytes - about 15 decimal places
of accuracy- double precision.http://improvec.blogspot.in
17
Internal Representation
FLOAT:
01 8 9 31
SEEEEEEEE mmmmm…m
DOUBLE:
01 11 12 63
SEEEEEEEEEEE mmmmmmm…m
Implied mantissa of 1 is not stored.
Sign bit (1 for neg-otherwise pos).http://improvec.blogspot.in
18
Float:
Precision: 6 significant digits.
Range: 10-38
to 10+38
0.d1d2d3d4d5d6× 10n
Double:
Precision: 15 significant digits (252
≈ 1015
)
Range: 10-308
to 10+308
0.123451234512345 × 103
http://improvec.blogspot.in
19
Note:
1. Not all Real numbers are exactly
representable in binary memory.
2. Floating Arithmetic ops, unlike integer
arithmetic, may not be exact.
http://improvec.blogspot.in
20
• Unary operator used to find the number of Bytes
needed to store an object.
sizeof(object)
• Object
– Data type int , float, …
– Expression a + b
Array
Will cover
later
Structure
Compile-Time Operator sizeof
http://improvec.blogspot.in
21
Assuming that integers are 4 bytes and
doubles are 8 bytes.
double f;
printf("%d ",sizeof (f)); 8
printf(''%d", sizeof(int)); 4
http://improvec.blogspot.in
22
sizeof(char) = 1
sizeof(short) ≤ sizeof(int) ≤ sizeof(long)
sizeof(signed)=sizeof(unsigned)=sizeof(int)
sizeof(float)
<= sizeof(double )
<= sizeof( long double)
http://improvec.blogspot.in
23
Conversions
• When constants and variables of different types
are mixed in an expression, the compiler converts
all operands to the type of the largest operand-
Called Type Promotion.
- First, all char and short values are automatically
elevated to int. Called integral promotion.
- int + int = int
- short + short = int
- Arithmetic Conversion (See pg. 217)
http://improvec.blogspot.in
24
char ch;
int i;
float f;
double d,result;
result= (ch / i) + (f * d) – (f + i);
int double float
double
http://improvec.blogspot.in
25
• Casts - Explicit conversions.
(type) expression
If i is int:
(float) i will change expression value to
float, i is not changed.
Casts
(float) i/2
http://improvec.blogspot.in
26
• Apply to an Expression:
(float) (‘c’ + 3)
• Cannot apply to an Assignment:
(int) f = 3: illegal
• As an unary operator, a cast has the same
precedence as any other unary operator.
(float) i + 3 ( (float) i ) + 3
http://improvec.blogspot.in
27
/* print i and i/2 with fractions */
int main(void)
{
int i;
for(i=l; i<=100; ++i)
printf(''%d //2 is: %f
n", i, (float) i /2);
return 0;
}
http://improvec.blogspot.in
28
General forms:
(int) char expression- ordinal value of char
expression
(char) int expression- character with the
ordinal value of int
expression
(int) float expression- truncates the float
expression
(float) int expression- converts int to float
(double) float exp- converts float to
doublehttp://improvec.blogspot.in

Data type

  • 1.
  • 2.
    2 Declaration • All variablesmust be declared before being used. – Tells compiler to set aside an appropriate amount of space in memory to hold a value. – Enables the compiler to perform operations using the declared variables. http://improvec.blogspot.in
  • 3.
    3 Basic Data Types •char character • int integer • float floating-point • double double floating-point • void valueless http://improvec.blogspot.in
  • 4.
    4 Modifying the BasicTypes • Type modifier: signed unsigned long short • When a type modifier is used by itself, then int is assumed. Modifier Same As signed signed int unsigned unsigned int long long int short short int http://improvec.blogspot.in
  • 5.
    5 Data Type char HaveSeen:Chars are treated as small integers & conversely small ints are treated as chars. char c = ‘a’; printf (“%c”, c + 1) b printf (“%d”, c + 2) 99 Each char variable stored in 1 Byte 8 Bits: 27 26 25 24 23 22 21 20 128 64 32 16 8 4 2 1 a 0000110 1http://improvec.blogspot.in
  • 6.
    6 • String ofbinary digits are called bit strings. • A bit string is interpreted as a binary number. bnbn-1 …… b2b1b0 0 1 1 0 0 0 0 1 a • This bit string has the value: 1×26 + 1×25 + 1×20 = 97http://improvec.blogspot.in
  • 7.
    7 3 types: 1) char2) unsigned char 3) signed char Each uses 1 Byte. Signed char -128 to 127 Unsigned char 0 to 255 http://improvec.blogspot.in
  • 8.
    8 INTEGERS : Includethe natural counting numbers and their negatives. INTEGRAL DATA TYPES: int short long unsigned Data Type int http://improvec.blogspot.in
  • 9.
    9 • The magnitudeof the number that an int variable can hold depends on ___________? 2 Byte word ~ -32 K To +32K -215 , …, -3, -2, -1, 0, 1, 2, 3, …, 215 -1 4 Byte word ~ -2 Billion To +2 Billion -231 , …. -3, -2, -1, 0, 1, 2, 3, …, 231 -1 word size(bits) of the machine is machine dependent http://improvec.blogspot.in
  • 10.
    10 • Integer overflow: –Value too large for defined Storage Location. – Typically program continues to run but incorrect results. – The programmer must strive at all times to avoid integer overflow. http://improvec.blogspot.in
  • 11.
    11 Types short, long,unsigned • short - used where conserving storage is a concern (usually 2 Bytes). -32 Thousand To +32 Thousand -215 , -215 +1, …, -3, -2, -1, 0, 1, 2, 3, …, 215 -1 • long - needed for larger integers (usually 4 bytes). -2 Billion To +2 Billion 31 31 31 http://improvec.blogspot.in
  • 12.
    12 • Unsigned -no sign bit, same number bytes as int. The range, u, of values: 0 ≤ u ≤ 2wordsize -1 2 Byte word ~ 0 To + 64 Thousand 0, 1, 2, 3, …, 216 -1 4 Byte word ~ 0 To + 4 Billion 0, 1, 2, 3, …, 232 -1http://improvec.blogspot.in
  • 13.
    13 Suffix: u - 20u l– 20l ul - 20ul (case not significant) IF no suffix with constant - system will choose the first of : int - long - unsigned long That can hold the value. http://improvec.blogspot.in
  • 14.
    14 float double longdouble • Suffixes for constants f or F float 3.7 F l or L long double 3.7 L • Any unsuffixed floating constant is of type double (working type). The Floating Types http://improvec.blogspot.in
  • 15.
    15 • Notation: exponentialor decimal Must have Exponent or Dec pt or Both. 1.234567e5 123456.7 1.234567e-3 0.001234567 0e0 correct 0.0 .e0 wrong May not contain any blanks or special characters. • Typical Storage: Float < Double http://improvec.blogspot.in
  • 16.
    16 Precision: The numberof significant decimal digits that floating value carries. Range: Limits of largest & smallest possible values that can be in a variable of that type. Float: 4 Bytes - about 6 decimal places of accuracy- single precision. Double: 8 Bytes - about 15 decimal places of accuracy- double precision.http://improvec.blogspot.in
  • 17.
    17 Internal Representation FLOAT: 01 89 31 SEEEEEEEE mmmmm…m DOUBLE: 01 11 12 63 SEEEEEEEEEEE mmmmmmm…m Implied mantissa of 1 is not stored. Sign bit (1 for neg-otherwise pos).http://improvec.blogspot.in
  • 18.
    18 Float: Precision: 6 significantdigits. Range: 10-38 to 10+38 0.d1d2d3d4d5d6× 10n Double: Precision: 15 significant digits (252 ≈ 1015 ) Range: 10-308 to 10+308 0.123451234512345 × 103 http://improvec.blogspot.in
  • 19.
    19 Note: 1. Not allReal numbers are exactly representable in binary memory. 2. Floating Arithmetic ops, unlike integer arithmetic, may not be exact. http://improvec.blogspot.in
  • 20.
    20 • Unary operatorused to find the number of Bytes needed to store an object. sizeof(object) • Object – Data type int , float, … – Expression a + b Array Will cover later Structure Compile-Time Operator sizeof http://improvec.blogspot.in
  • 21.
    21 Assuming that integersare 4 bytes and doubles are 8 bytes. double f; printf("%d ",sizeof (f)); 8 printf(''%d", sizeof(int)); 4 http://improvec.blogspot.in
  • 22.
    22 sizeof(char) = 1 sizeof(short)≤ sizeof(int) ≤ sizeof(long) sizeof(signed)=sizeof(unsigned)=sizeof(int) sizeof(float) <= sizeof(double ) <= sizeof( long double) http://improvec.blogspot.in
  • 23.
    23 Conversions • When constantsand variables of different types are mixed in an expression, the compiler converts all operands to the type of the largest operand- Called Type Promotion. - First, all char and short values are automatically elevated to int. Called integral promotion. - int + int = int - short + short = int - Arithmetic Conversion (See pg. 217) http://improvec.blogspot.in
  • 24.
    24 char ch; int i; floatf; double d,result; result= (ch / i) + (f * d) – (f + i); int double float double http://improvec.blogspot.in
  • 25.
    25 • Casts -Explicit conversions. (type) expression If i is int: (float) i will change expression value to float, i is not changed. Casts (float) i/2 http://improvec.blogspot.in
  • 26.
    26 • Apply toan Expression: (float) (‘c’ + 3) • Cannot apply to an Assignment: (int) f = 3: illegal • As an unary operator, a cast has the same precedence as any other unary operator. (float) i + 3 ( (float) i ) + 3 http://improvec.blogspot.in
  • 27.
    27 /* print iand i/2 with fractions */ int main(void) { int i; for(i=l; i<=100; ++i) printf(''%d //2 is: %f n", i, (float) i /2); return 0; } http://improvec.blogspot.in
  • 28.
    28 General forms: (int) charexpression- ordinal value of char expression (char) int expression- character with the ordinal value of int expression (int) float expression- truncates the float expression (float) int expression- converts int to float (double) float exp- converts float to doublehttp://improvec.blogspot.in