280 likes | 286 Views
Learn about fundamental data types in programming, including variable declaration, basic data types, modifying basic types, and integer and floating point types.
E N D
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.
Basic Data Types • char character • int integer • float floating-point • double double floating-point • void valueless
Modifying the Basic Types • Type modifier: signedunsignedlongshort • When a type modifier is used by itself, then int is assumed. ModifierSame As signed signed int unsigned unsigned int long long int short short int
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 0 1 1 0 0 0 0 1
String of binary digits are called bitstrings. • A bit string is interpreted as a binarynumber. bnbn-1……b2b1b0 0 1 1 0 0 0 0 1 a • This bit string has the value: 126 + 125 + 120= 97
3 types: 1) char 2) unsigned char 3) signed char Each uses 1 Byte. Signed char -128 to 127 Unsigned char 0 to 255
Data Type int INTEGERS : Include the natural counting numbers and their negatives. INTEGRAL DATA TYPES: int short long unsigned
word size(bits) of the machine is machine dependent • 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
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.
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 -231, -231+1, …, -3, -2, -1, 0, 1, 2, 3, …, 231-1
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-1
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.
The Floating Types floatdoublelong 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).
Notation:exponential or decimal Must have Exponent or Dec pt or Both. 1.234567e5 123456.7 1.234567e-3 0.001234567 0e0correct0.0 .e0wrong May not contain any blanks or special characters. • Typical Storage: Float < Double
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.
Internal Representation FLOAT: 01 8 9 31 SEEEEEEEEmmmmm…m DOUBLE: 01 11 12 63 SEEEEEEEEEEEmmmmmmm…m Implied mantissa of 1 is not stored. Sign bit (1 for neg-otherwise pos).
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
Note: 1. Not all Real numbers are exactly representable in binary memory. 2. Floating Arithmetic ops, unlike integer arithmetic, may not be exact.
Compile-Time Operator sizeof • Unary operator used to find the number ofBytes needed to store an object. sizeof(object) • Object • Data type int , float, … • Expression a + b Array Will cover later Structure
Assuming that integers are 4 bytes and doubles are 8 bytes. double f; printf("%d ",sizeof (f));8 printf(''%d", sizeof(int));4
sizeof(char) = 1 sizeof(short) sizeof(int)sizeof(long) sizeof(signed)=sizeof(unsigned)=sizeof(int) sizeof(float) <= sizeof(double ) <=sizeof( long double)
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 TypePromotion. • 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)
char ch; int i; float f; double d,result; result= (ch / i) + (f * d) – (f + i); intdouble float double
Casts • Casts - Explicit conversions. (type) expression If i is int: (float) i will change expression value to float, i is not changed. (float) i/2
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
/* 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; }
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 double