PPL (Unit2 Data Types)
PPL (Unit2 Data Types)
Data Types
Definitions
Data type
collection of data objects a set of predefined operations
Descriptor : collection of attributes for a variable Object : instance of a user-defined (abstract data) type
Structured
built out of other types
Integer Types
Usually based on hardware May have several ranges
Javas 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.
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
Ones complement
Twos Complement
To get the binary representation, take the complement and add 1
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
18
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
110
Some scripting languages only have one kind of number which is a floating point type
Store a fixed number of decimal digits Operations generally have to be defined in software Advantage: accuracy Disadvantages: limited range, wastes memory
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
Character
Stored as numeric codings Most commonly used coding: ASCII An alternative, 16-bit coding: Unicode
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?
C and C++
Not primitive Use char arrays and a library of functions that provide operations
Java
String class
Dynamic (no maximum): SNOBOL4, Perl, JavaScript Ada supports all three string length options
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
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
Subrange Types
A contiguous subsequence of an ordinal type
Example: 12..18 is a subrange of integer type
Adas design
type Days is (mon, tue, wed, thu, fri, sat, sun); subtype Weekdays is Days range mon..fri; subtype Index is Integer range 1..100;
Day1: Days; Day2: Weekday; Day2 := Day1;
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
Pointer Operations
Two fundamental operations: assignment and dereferencing Assignment is used to set a pointer variables value to some useful address Dereferencing yields the value stored at the location represented by the pointers value
Dereferencing can be explicit or implicit C++ uses an explicit operation via * j = *ptr sets j to the value located at ptr
128
Pointer Problems
Dangling pointers (dangerous)
A pointer points to a heap-dynamic variable that has been de-allocated
Garbage
An allocated heapdynamic variable that is no longer accessible to the user program
*(p+5) is equivalent to stuff[5] and p[5] *(p+i) is equivalent to stuff[i] and p[i]
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-byvalue
Java extends C++s reference variables and allows them to replace pointers entirely
References refer to call instances
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
Associative arrays
unordered collection of key-value pairs
Records
heterogeneous aggregate of data elements indexed by element name
Array Operations
Whole array operations:
assignment catenation
Elemental operations same as those of base type Indexing : mapping from indexes to elements
array_name (index_value_list) element an
Array Initialization
Some language allow initialization at the time of storage allocation
C, C++, Java, C# example int list [] = {4, 5, 7, 83} Character strings in C and C++ char name [] = freddie; Arrays of strings in C and C++ char *names [] = {Bob, Jake, Joe};
Copyright 2007 Addison-Wesley. All rights reserved.
139
Implementation of Arrays
Access function maps subscript expressions to an address in the array Access function for single-dimensioned arrays:
address(list[k]) = address (list[lower_bound]) + ((k-lower_bound) * element_size)