Simple Data TypesSimple Data Types
Built-In
and
User DefinedChapter 10
2
Built-In Simple TypesBuilt-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 TypesCharacteristics 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 TypesIntegral 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 TypesFloating 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
6Assignment Operators & Assignment Operators & ExpressionsExpressions
• 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
7
Combined Assignment OperatorsCombined Assignment Operators
• Considera += 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
8Increment & Decrement Increment & Decrement OperatorsOperators
• a++; // a unary operator which increments a by 1same 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
9
Bitwise OperatorsBitwise 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 OperatorThe 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 castingx = (int)f; // use the type in ( ) f = float(x); // use the type as a function
11
The sizeof OperatorThe 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 The Selection Operator ? :? :
• A trinary operator -- requires three operands
• Exampleamt = (x < 5) ? y : z;
• If x < 5 then amt gets value stored in yotherwise gets value stored in z
13
Operator PrecedenceOperator 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 DataCharacter 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 characterschar c1, c2;c1 = 12;c2 = 'A' // Both are legal
15
Character SetsCharacter 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 ConstantsC++ 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 CharactersComparing 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
18Convert Digit Characters to Convert Digit Characters to IntegersIntegers
• Possible to do arithmetic with characters– they are basically, integers
• Examplechar ch;cin >> ch;num = ch - '0';
19Converting Lowercase to Converting Lowercase to UppercaseUppercase
• From ctype.h header file, use functions providedch = toupper (ch);ch = tolower(ch):
• Change only made if ch "needs" to be changed– if it is already uppercase, toupper( ) does
nothing
20Representing Floating Point Representing Floating Point NumbersNumbers
• Precision of 5 or 6 significant digits
• Represented internally in scientific notationFour bytes will store– sign bit for the number– 5 or 6 significant digits– sign bit for the power 38 range for the power
21Arithmetic with Floating Point Arithmetic with Floating Point NumbersNumbers
• 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 closenessif ( abs (a - b) < 0.0001) …
22Implementation of Float on a Implementation of Float on a ComputerComputer
• Example: 1.2345E-4
Significant digits: from 1st nonzero digit on left to last non zero digit on right
Significant digits: from 1st nonzero digit on left to last non zero digit on right
Precision: max number of significant
digits
Precision: max number of significant
digits
Representational Error:
The arithmetic error when
precision of true results greater
than precision for machine
Representational Error:
The arithmetic error when
precision of true results greater
than precision for machine
1.200000000000345
23Implementation of Float on a Implementation of Float on a ComputerComputer
• Underflow– results of calculation too small to be
represented1.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
24
The Typedef StatementThe 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 TypesEnumerated 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 TypesEnumerated Types
• Incrementing variables of an enumerated type
• Do NOT use workaday += 1; NOR today++;
• Instead, use explicit type conversiontoday = daysOfWeek (today + 1);
27
Enumerated TypesEnumerated 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
28Named and Anonymous Data Named and Anonymous Data TypesTypes
• Named Type– user defined type– declaration includes typedef
– As with daysOfWeek or Boolean• Anonymous Type
• does not have an associated typeenum (MILD, MEDIUM, HOT) salsa_sizzle;
• variable declared without typedef
29
User-Written Header FilesUser-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 ExpressionsType Coercion in Expressions
• If two operands are of different types– one is temporarily "promoted" or "widened" to
match the data type of the otherint x = 5;float f = 1.234, amt = + f;
• Another example:– char or short operands promoted to intint x = 5 + 'Q';
Expression result is of type int
Expression result is of type int
31
Type Coercion in AssignmentsType Coercion in Assignments
• Can result in "demotion" or "narrowing"• Assigning a float to an integer variable
int x = 3.456;
– decimal portion of float is lost
• This loss of data can be considered a problem or a feature!
x | 3x | 3
Memory