Simple Data Types

advertisement
Simple Data Types
Built-In
and
User Defined
Chapter 10
2
Built-In Simple Types
• Simple (or "atomic")
• Each value is indivisible, a single entity
• Examples
– int, char, float
• NOT simple types
– strings, arrays, structs
3
Characteristics of Simple Types
• An object of a given type uses a specific
number of bytes
– sizeof( ) function will give how many
– int => 2 bytes
– float => 4 bytes (on our Borland C++)
• An object of a simple type has a range of
values
– low to high
– range is limited by size allocated to the type
4
Integral Types
• Include
–
–
–
–
char, short, int, long
can be signed or unsigned
signed integer stored in 2 bytes
range is -32768 … 32767
• Constants can be specified in
– decimal, octal, hex
– normally in decimal
5
Floating Point Types
• Stored in scientific notation
• Include
– float, double, long double
• Float stored in 8 bytes
– 5 - 6 significant digits
– range  3.4 E  38
Assignment Operators &
Expressions
• Assignment operator =
– Syntax :
variable = expression;
• Statement has
– a value of the expression
– value stored in variable location
• Value previously stored in variable is now
wiped out
6
7
Combined Assignment Operators
• Consider
a += 5; // same as a = a + 5;
• Similar results with
-= *= /= %=
• The symbol += is considered a binary
operator
– syntax requires a variable on the left
– an expression on the right
Increment & Decrement
Operators
• a++;
// a unary operator which increments
a by 1
same as a = a + 1; or a += 1;
• Similar results with -• ++ and -- work only on variables … not constants
• Consider cout << a++; and cout << ++a;
– post increment prints, then increments
– pre-increment increments first, then prints
8
9
Bitwise Operators
• Operators <<, >> , & , and |
• Used for manipulating individual bits within
memory
• << and >> for shifting bits
• Most of what we do will use && and || for
logical AND and OR
10
The Cast Operator
• Wen mixing data types in expressions,
implicit type casting occurs
• Example int x; float f;
Consider
x = f;
Versus
f = x;
• Text suggests explicit type casting
x = (int)f;
// use the type in ( )
f = float(x); // use the type as a
function
11
The sizeof Operator
• A unary operator
– yields size (in bytes) of some variable or data
type
– almost acts as a function
• cout << sizeof (part_struct);
• Often used for arrays or structs where you
need to specify number of bytes to be read
in or sent to a file
12
The Selection Operator ? :
• A trinary operator -- requires three
operands
• Example
amt = (x < 5) ? y : z;
• If x < 5 then amt gets value stored in y
otherwise gets value stored in z
13
Operator Precedence
• Similar to algebraic precedence
– Parentheses, unary, mult, div, addn, subt
– Note page A1 Appendix B
• Note also that some are L-> R,
others are R-> L:
14
Character Data
• Char is actual considered a subset of int
– uses 1 byte of memory
• Since it is subset of int, it can store numbers
or characters
char c1, c2;
c1 = 12;
c2 = 'A'
// Both are legal
15
Character Sets
• External representation => what you see
printed on screen or printer
• Internal representation => bit form for
storing the data in the computer memory
• Most machines we encounter will use
ASCII character set
• Other machines use EBCDIC
• Appendix D, pg A9 has examples of both
16
C++ char Constants
• Single printable character enclosed by
single quotes
'A'
'7' '$'
– can be letters, numerals, or symbols
• Control characters (non printable
characters) used to control output
'\n'
for newline (same as endl)
'\f'
for form feed
'\t'
for tab
'\a'
for beep
17
Comparing Characters
• Use comparison operators
< == >= etc.
• Consider if (ch >= 'a' && ch <= 'z') ...
This checks to see if ch is in the lower case
characters
• Equivalent is if (islower (ch)) …
– found in ctype.h
• Check out character-testing library functions in
Appendix C, pgs A2-A4
Convert Digit Characters to
Integers
• Possible to do arithmetic with characters
– they are basically, integers
• Example
char
ch;
cin >> ch;
num = ch - '0';
18
Converting Lowercase to
Uppercase
• From ctype.h header file, use functions
provided
ch = toupper (ch);
ch = tolower(ch):
• Change only made if ch "needs" to be
changed
– if it is already uppercase, toupper( ) does
nothing
19
Representing Floating Point
Numbers
• Precision of 5 or 6 significant digits
• Represented internally in scientific notation
Four bytes will store
–
–
–
–
sign bit for the number
5 or 6 significant digits
sign bit for the power
 38 range for the power
20
Arithmetic with Floating Point
Numbers
• May lose accuracy due to round off error
– especially when combining very large with very
small numbers
• Warnings
– don't use floats to control loops
– don't compare floats for equality, rather
compare for closeness
if ( abs (a - b) < 0.0001) …
21
Implementation of Float on a
Computer
• Example:
Significant digits:
from 1st nonzero
digit on left to last
non zero digit on
right
1.2345E-4
Precision:
max number
of significant
digits
Representational
Error:
The arithmetic
error when
precision of true
results greater
than precision for
machine
1.200000000000345
22
Implementation of Float on a
Computer
• Underflow
– results of calculation too small to be
represented
1.3E10 + 4.5E-10
• Overflow
– value of calculation too large to be stored
5.6E20 * 7.8E30
– C++ does not define results when this occurs,
usually garbage values
23
24
The Typedef Statement
• Syntax:
typedef
existing_type_name
new_type_name;
• Example:
typedef int Boolean;
• Does not really create a new type
– is a valuable tool for writing self-documenting
programs
25
Enumerated Types
• Possible to create a new type by simply
listing (enumerating) the constants which
make up the type
• Example:
enum daysOfWeek (SUN, MON, TUE, WED,
THU, FRI, SAT);
daysOfWeek today, tomorrow, work_day;
work_day = MON;
• C++ represents these internally as numbers
(0 .. 6 for our example)
26
Enumerated Types
• Incrementing variables of an enumerated type
• Do NOT use workaday += 1;
NOR
today++;
• Instead, use explicit type conversion
today = daysOfWeek (today + 1);
27
Enumerated Types
• Comparison
– normal, OK
– in order of the enumeration definition
• I/O
– generally not possible to do directly
– can be sort of done, indirectly
• Used primarily for program control, branching,
looping
• Possible to have functions return an enumerated type
Named and Anonymous Data
Types
• Named Type
– user defined type
– declaration includes typedef
– As with daysOfWeek or Boolean
• Anonymous Type
• does not have an associated type
enum (MILD, MEDIUM, HOT) salsa_sizzle;
• variable declared without typedef
28
29
User-Written Header Files
• For your collection of handy identifiers
– type such as our Boolean type definition
• use
#include "bool.h"
– note use of " " rather than < >
• Tells the computer to go looking at the
logged directory for bool.h file and
include/insert it into the source code.
30
Type Coercion in Expressions
• If two operands are of different types
– one is temporarily "promoted" or "widened" to
match the data type of the other
int x = 5;
float f = 1.234,
amt =
+
• Another example:
– char or short operands promoted to int
int x = 5 + 'Q';
Expression result is
of type int
f;
31
Type Coercion in Assignments
• Can result in "demotion" or "narrowing"
• Assigning a float to an integer variable
int x = 3.456;
x | 3
Memory
– decimal portion of float is lost
• This loss of data can be considered a
problem or a feature!
Download