Download presentation
1
Primitive Data Types: Numbers Strings Ordinal Types Pointers
Chapter 6 Primitive Data Types: Numbers Strings Ordinal Types Pointers
2
Data Types Data types provide a context for operations
the + operator works differently for different types of numbers (and for strings) Types also limit the operations that can be performed to those that make sense dividing strings or characters doesn't make sense Copyright © 2007 Addison-Wesley. All rights reserved.
3
Type Systems provide A mechanism for defining types and associating them with language constructs named constants, variables, record fields, parameters, … A set of rules for type equivalence type compatibility type inference Copyright © 2007 Addison-Wesley. All rights reserved.
4
Ways to think about types
Denotational a type is a set of values Constructive types are built-in or created from existing types Abstraction-based a type is an interface consisting of a set of operations Copyright © 2007 Addison-Wesley. All rights reserved.
5
Definitions data type collection of data objects a set of predefined operations descriptor : collection of attributes for a variable data object : instance of a user-defined (abstract data) type Copyright © 2007 Addison-Wesley. All rights reserved. 5
6
Ways of classifying types
Simple vs. compound Built-in vs. user-defined boolean, character, integer, floating point enumeration types, classes, records/structures discrete (enumerable) or not integer, boolean, character, enumeration, subrange real, compound Copyright © 2007 Addison-Wesley. All rights reserved.
7
Data Types Primitive Structured
not defined in terms of other data types defined in the language often reflect the hardware Structured built out of other types Copyright © 2007 Addison-Wesley. All rights reserved. 7
8
Integer Types Usually use hardware representation
May have several ranges Java’s signed integer sizes: byte, short, int, long C/C++ have unsigned versions of the same types Scripting languages often just have one integer type Python has an integer type and a long integer which can get as big as it needs to. python integer is same as C long (?= 32 bits) Copyright © 2007 Addison-Wesley. All rights reserved. 8
9
Representing Integers
Can convert positive integers to base 2 How do you handle negative numbers with only 0s and 1s? Sign bit Ones complement Twos complement - this is the one that is used Copyright © 2007 Addison-Wesley. All rights reserved. 9
10
Representing negative integers
Sign bit Ones complement Copyright © 2007 Addison-Wesley. All rights reserved. 10
11
Twos Complement To get the binary representation, take the complement and add 1 Copyright © 2007 Addison-Wesley. All rights reserved. 11
12
Floating Point Types Model real numbers
only an approximation due to round-off error For scientific use support at least two floating-point types (e.g., float and double; sometimes more Usually based on hardware IEEE Floating-Point Standard 754 32 and 64 bit standards Copyright © 2007 Addison-Wesley. All rights reserved. 12
13
Representing Real Numbers
We can convert the decimal number to base 2 just as we did for integers How do we represent the decimal point? fixed number of bits for the whole and fractional parts severely limits the range of values we can represent Use a representation similar to scientific notation Copyright © 2007 Addison-Wesley. All rights reserved. 13
14
IEEE Floating Point Representation
Normalize the number one non-zero bit before decimal point Use one bit to represent the sign (1 for negative) Use a fixed number of bits for the exponent which is offset to allow for negative exponents Exponent = exponent + offset (-1)sign 1.Fraction x 2Exponent Copyright © 2007 Addison-Wesley. All rights reserved. 14
15
Floating Point Types C, C++ and Java have two floating point types
double Most scripting languages have one floating point type Python's floating point type is equivalent to a C double Some scripting languages only have one kind of number which is a floating point type Copyright © 2007 Addison-Wesley. All rights reserved. 15
16
Fixed Point Types (Decimal)
For business applications (money) round-off errors are not acceptable Essential to COBOL .NET languages have a decimal data type Store a fixed number of decimal digits Operations generally have to be defined in software Advantage: accuracy Disadvantages: limited range, wastes memory Copyright © 2007 Addison-Wesley. All rights reserved. 16
17
C# decimal Type 128-bit representation Range: 1.0x10-28 to 7.9x1028
Precision: representation is exact to 28 or 29 decimal places (depending on size of number) no roundoff error Copyright © 2007 Addison-Wesley. All rights reserved. 17
18
Other Primitive Data Types:
Boolean Range of values: two elements, one for “true” and one for “false” Could be implemented as bits, but often as bytes Character Stored as numeric codings Most commonly used coding: ASCII An alternative, 16-bit coding: Unicode Complex (Fortran, Scheme, Python) Rational (Scheme) Copyright © 2007 Addison-Wesley. All rights reserved. 18
19
Character Strings Values are sequences of characters Operations:
Assignment and copying Comparison (=, >, etc.) Catenation Substring reference Pattern matching Design issues: Is it a primitive type or just a special kind of array? Should the length of strings be static or dynamic? Copyright © 2007 Addison-Wesley. All rights reserved. 19
20
Character String Implementations
C and C++ Not primitive Use char arrays and a library of functions that provide operations SNOBOL4 (a string manipulation language) Primitive Many operations, including elaborate pattern matching Java String class Copyright © 2007 Addison-Wesley. All rights reserved. 20
21
String Length Options Static: COBOL, Java’s String class
Limited Dynamic Length: C and C++ a special character is used to indicate the end of a string’s characters Dynamic (no maximum): SNOBOL4, Perl, JavaScript Ada supports all three string length options Aid to writability As a primitive type with static length, they are inexpensive to provide--why not have them? Dynamic length is nice, but is it worth the expense? Copyright © 2007 Addison-Wesley. All rights reserved. 21
22
String Implementation
Static length: compile-time descriptor Limited dynamic length: may need run-time descriptor not in C and C++ Dynamic length: needs run-time descriptor; allocation/deallocation is main implementation issue Copyright © 2007 Addison-Wesley. All rights reserved. 22
23
User-Defined Ordinal Types
ordinal type : range of possible values corresponds to set of positive integers Primitive ordinal types integer char boolean User-defined ordinal types enumeration types subrange types Copyright © 2007 Addison-Wesley. All rights reserved. 23
24
Enumeration Types All possible values, which are named constants, are provided in the definition C example enum days {mon, tue, wed, thu, fri, sat, sun}; Design issues duplication of names coercion rules Aid to readability, e.g., no need to code a color as a number Aid to reliability, e.g., compiler can check: operations (don’t allow colors to be added) No enumeration variable can be assigned a value outside its defined range Ada, C#, and Java 5.0 provide better support for enumeration than C++ because enumeration type variables in these languages are not coerced into integer types Copyright © 2007 Addison-Wesley. All rights reserved. 24
25
enums in C (and C++) To define an enumerated type in C
enum weekday {Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday}; enum weekday today = Tuesday; Use typedef to give the type a name typedef enum weekday {Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday} weekday; weekday today = Tuesday; By default, values are consecutive starting from 0. You can explicitly assign values Enum months {January=1, February, …}; Copyright © 2007 Addison-Wesley. All rights reserved. 25
26
Enumerations in Java 1.5 An enum is a new class which extends java.lang.Enum and implements Comparable Get type safety and compile-time checking Implicitly public, static and final Can use either == or equals to compare toString and valueOf are overridden to make input and output easier Copyright © 2007 Addison-Wesley. All rights reserved. 26
27
Java enum Example Defining an enum type Declaring an enum variable
enum Season {WINTER, SPRING, SUMMER, FALL}; Declaring an enum variable Season season = Season.WINTER; toString() and name() give you the string representation of the name // println calls toString(), prints WINTER System.out.println( season); // name()returns WINTER String name = season.name(); Copyright © 2007 Addison-Wesley. All rights reserved. 27
28
Java enum Example valueOf lets you convert a String to an enum
Season s = valueOf(“SPRING”); the ordinal() method returns the position of a particular value in the list of names int n = s.ordinal() // returns 1 the static member values() gives you an iterable list of the enum values for (Season s : Seasons.values()) {…} Copyright © 2007 Addison-Wesley. All rights reserved. 28
29
Subrange Types A contiguous subsequence of an ordinal type
Example: is a subrange of integer type Ada’s design type Days is (mon, tue, wed, thu, fri, sat, sun); subtype Weekdays is Days range mon..fri; subtype Index is Integer range ; Day1: Days; Day2: Weekday; Day2 := Day1; Aid to readability Make it clear to the readers that variables of subrange can store only certain range of values Reliability Assigning a value to a subrange variable that is outside the specified range is detected as an error Copyright © 2007 Addison-Wesley. All rights reserved. 29
30
Implementation of User-Defined Ordinal Types
Enumeration types are implemented as integers Subrange types are implemented like the parent types code inserted (by the compiler) to restrict assignments to subrange variables Copyright © 2007 Addison-Wesley. All rights reserved. 30
31
Pointer and Reference Types
A pointer is a variable whose value is an address range of values that consists of memory addresses plus a special value, nil (or null or NULL) Provide the power of indirect addressing Provide a way to manage dynamic memory A pointer can be used to access a location in the area where storage is dynamically created (usually called a heap) Generally represented as a single number What are the scope of and lifetime of a pointer variable? What is the lifetime of a heap-dynamic variable? Are pointers restricted as to the type of value to which they can point? Are pointers used for dynamic storage management, indirect addressing, or both? Should the language support pointer types, reference types, or both? Copyright © 2007 Addison-Wesley. All rights reserved. 31
32
Pointer Operations Two fundamental operations: assignment and dereferencing Assignment is used to set a pointer variable’s value to some useful address Dereferencing yields the value stored at the location represented by the pointer’s value Dereferencing can be explicit or implicit C++ uses an explicit operation via * j = *ptr sets j to the value located at ptr Copyright © 2007 Addison-Wesley. All rights reserved. 32
33
Pointer Operations Illustrated
Dereferencing a pointer j = *ptr assignment ptr = &j allocation ptr = (int*)malloc( sizeof( int)) Copyright © 2007 Addison-Wesley. All rights reserved. 33
34
Pointer Problems Dangling pointers (dangerous) Garbage
A pointer points to a heap-dynamic variable that has been de- allocated Garbage An allocated heap- dynamic variable that is no longer accessible to the user program Copyright © 2007 Addison-Wesley. All rights reserved. 34
35
Pointers in C and C++ Extremely flexible but must be used with care
Pointers can point at any variable regardless of when it was allocated Used for dynamic storage management and addressing Pointer arithmetic is possible Explicit dereferencing and address-of operators void * gives a generic pointer can point to any type cannot be de-referenced but can be assigned to a pointer of a different type Copyright © 2007 Addison-Wesley. All rights reserved. 35
36
Reference Types C++ includes a special kind of pointer type called a reference type that is used primarily for formal parameters Advantages of both pass-by-reference and pass-by- value Java extends C++’s reference variables and allows them to replace pointers entirely References refer to objects (including arrays) only C# includes both the references of Java and the pointers of C++ Copyright © 2007 Addison-Wesley. All rights reserved. 36
37
Evaluation of Pointers
Dangling pointers and dangling objects are problems as is heap management Pointers are like goto's--they widen the range of cells that can be accessed by a variable Pointers or references are necessary for dynamic data structures--so we can't design a language without them Copyright © 2007 Addison-Wesley. All rights reserved. 37
Similar presentations
© 2024 SlidePlayer.com Inc.
All rights reserved.