CS140 Lecture 08: Data Representation: Bits and Ints John Magee 13 February 2017 Material From Computer Systems: A Programmer's Perspective, 3/E (CS:APP3e) Randal E. Bryant and David R. O'Hallaron, Carnegie Mellon University 1
Today: Bits, Bytes, and Integers Representing information as bits Bit-level manipulations Integers Representation: unsigned and signed Conversion, casting Expanding, truncating Addition, negation, multiplication, shifting Summary Representations in memory, pointers, strings 2
Binary Representations 0 1 0 3.3V 2.8V 0.5V 0.0V 3
Encoding Byte Values Byte = 8 bits Binary 00000000 2 to 11111111 2 0 0 0000 Decimal: 0 10 to 255 10 1 1 0001 2 2 0010 Hexadecimal 00 16 to FF 16 3 3 0011 4 4 0100 Base 16 number representation 5 5 0101 6 6 0110 Use characters ‘0’ to ‘9’ and ‘A’ to ‘F’ 7 7 0111 Write FA1D37B 16 in C as 8 8 1000 9 9 1001 – 0xFA1D37B A 10 1010 – 0xfa1d37b B 11 1011 C 12 1100 D 13 1101 E 14 1110 F 15 1111 4
Byte-Oriented Memory Organization • • • Programs Refer to Virtual Addresses Conceptually very large array of bytes Actually implemented with hierarchy of different memory types System provides address space private to particular “process” Program being executed Program can clobber its own data, but not that of others Compiler + Run-Time System Control Allocation Where different program objects should be stored All allocation within single virtual address space 5
Machine Words Machine Has “Word Size” Nominal size of integer-valued data Including addresses Recently most machines used 32 bits (4 bytes) words Limits addresses to 4GB Becoming too small for memory-intensive applications High-end systems use 64 bits (8 bytes) words Potential address space ≈ 1.8 X 10 19 bytes x86-64 machines support 48-bit addresses: 256 Terabytes Machines support multiple data formats Fractions or multiples of word size Always integral number of bytes 6
Word-Oriented Memory Organization 32-bit 64-bit Bytes Addr. Addresses Specify Byte Words Words Locations 0000 Addr 0001 Address of first byte in word = 0002 0000 ?? Addresses of successive words differ Addr 0003 by 4 (32-bit) or 8 (64-bit) = 0004 0000 ?? Addr 0005 = 0006 0004 ?? 0007 0008 Addr 0009 = 0010 0008 ?? Addr 0011 = 0008 ?? 0012 Addr 0013 = 0014 0012 ?? 0015 7
Example Data Representations C Data Type Typical 32-bit Typical 64-bit x86-64 char 1 1 1 short 2 2 2 int 4 4 4 long 4 8 8 float 4 4 4 double 8 8 8 long double − − 10/16 pointer 4 8 8 8
Byte Ordering How should bytes within a multi-byte word be ordered in memory? Conventions Big Endian: Sun, PPC Mac, Internet Least significant byte has highest address Little Endian: x86 Least significant byte has lowest address 9
Byte Ordering Example Big Endian Least significant byte has highest address Little Endian Least significant byte has lowest address Example Variable x has 4-byte representation 0x01234567 Address given by &x is 0x100 Big Endian 0x100 0x101 0x102 0x103 01 23 45 67 01 23 45 67 Little Endian 0x100 0x101 0x102 0x103 67 45 23 01 67 45 23 01 10
Reading Byte-Reversed Listings Disassembly Text representation of binary machine code Generated by program that reads the machine code Example Fragment Address Instruction Code Assembly Rendition 8048365: 5b pop %ebx 8048366: 81 c3 ab 12 00 00 add $0x12ab,%ebx 804836c: 83 bb 28 00 00 00 00 cmpl $0x0,0x28(%ebx) Deciphering Numbers Value: 0x12ab Pad to 32 bits: 0x000012ab Split into bytes: 00 00 12 ab Reverse: ab 12 00 00 11
Decimal: 15213 Representing Integers 0011 1011 0110 1101 Binary: 3 B 6 D Hex: int A = 15213; long int C = 15213; IA32, x86-64 Sun IA32 x86-64 Sun 6D 00 6D 6D 00 3B 00 3B 3B 00 00 3B 00 00 3B 00 6D 00 00 6D 00 int B = -15213; 00 00 IA32, x86-64 Sun 00 93 FF C4 FF FF C4 Two’s complement representation FF 93 12
Representing Pointers int B = -15213; int *P = &B; Sun IA32 x86-64 EF D4 0C FF F8 89 FB FF EC 2C BF FF FF 7F 00 00 Different compilers & machines assign different locations to objects 13
Representing Strings char S[6] = "18243"; Strings in C Represented by array of characters Each character encoded in ASCII format Linux/Alpha Sun Standard 7-bit encoding of character set 31 31 Character “0” has code 0x30 38 38 – Digit i has code 0x30+ i 32 32 String should be null-terminated 34 34 Final character = 0 33 33 Compatibility 00 00 Byte ordering not an issue 14
Today: Bits, Bytes, and Integers Representing information as bits Bit-level manipulations Integers Representation: unsigned and signed Conversion, casting Expanding, truncating Addition, negation, multiplication, shifting Summary 15
Boolean Algebra Developed by George Boole in 19th Century Algebraic representation of logic Encode “True” as 1 and “False” as 0 And Or A&B = 1 when both A=1 and B=1 A|B = 1 when either A=1 or B=1 Not Exclusive-Or (Xor) ~A = 1 when A=0 A^B = 1 when either A=1 or B=1, but not both 16
General Boolean Algebras Operate on Bit Vectors Operations applied bitwise 01101001 01101001 01101001 & 01010101 | 01010101 ^ 01010101 ~ 01010101 01000001 01111101 00111100 10101010 01000001 01111101 00111100 10101010 All of the Properties of Boolean Algebra Apply 17
Bit-Level Operations in C Operations & , | , ~ , ^ Available in C Apply to any “integral” data type long, int, short, char, unsigned View arguments as bit vectors Arguments applied bit-wise Examples (Char data type) ~0x41 & 0xBE ~01000001 2 & 10111110 2 ~0x00 & 0xFF ~00000000 2 & 11111111 2 0x69 & 0x55 & 0x41 01101001 2 & 01010101 2 & 01000001 2 0x69 | 0x55 | 0x7D 01101001 2 | 01010101 2 | 01111101 2 18
Contrast: Logic Operations in C Contrast to Logical Operators &&, ||, ! View 0 as “False” Anything nonzero as “True” Always return 0 or 1 Early termination Examples (char data type) !0x41 = 0x00 !0x00 = 0x01 !!0x41 = 0x01 0x69 && 0x55 && 0x01 0x69 || 0x55 || 0x01 p && *p (avoids null pointer access) 19
Contrast: Logic Operations in C Contrast to Logical Operators &&, ||, ! View 0 as “False” Anything nonzero as “True” Always return 0 or 1 Early termination Watch out for && vs. & (and || vs. |)… Examples (char data type) one of the more common oopsies in !0x41 0x00 C programming !0x00 0x01 !!0x41 0x01 0x69 && 0x55 0x01 0x69 || 0x55 0x01 p && *p (avoids null pointer access) 20
Shift Operations Left Shift: x << y Argument x 01100010 Shift bit-vector x left y positions << 3 00010 000 00010 000 00010 000 – Throw away extra bits on left Log. >> 2 00 011000 00 011000 00 011000 Fill with 0 ’s on right Arith. >> 2 00 011000 00 011000 00 011000 Right Shift: x >> y Shift bit-vector x right y positions Argument x 10100010 Throw away extra bits on right Logical shift << 3 00010 000 00010 000 00010 000 Fill with 0 ’s on left Log. >> 2 00 101000 00 101000 00 101000 Arithmetic shift Arith. >> 2 11 101000 11 101000 11 101000 Replicate most significant bit on left Undefined Behavior Shift amount < 0 or ≥ word size 21
Today: Bits, Bytes, and Integers Representing information as bits Bit-level manipulations Integers Representation: unsigned and signed Conversion, casting Expanding, truncating Addition, negation, multiplication, shifting Summary 22
Encoding Integers Unsigned Two’s Complement w − 1 w − 2 − x w − 1 ⋅ 2 w − 1 + ∑ ∑ = x i ⋅ 2 i = x i ⋅ 2 i B 2 U ( X ) B 2 T ( X ) i = 0 i = 0 short int x = 15213; Sign short int y = -15213; Bit C short 2 bytes long Decimal Hex Binary x 3B 6D 00111011 01101101 15213 y C4 93 11000100 10010011 -15213 Sign Bit For 2’s complement, most significant bit indicates sign 0 for nonnegative 1 for negative B2U = Binary to Unsigned B2T = Binary to Two’s Complement 23
Conversion Visualized 2’s Comp. → Unsigned UMax Ordering Inversion UMax – 1 Negative → Big Positive TMax + 1 Unsigned TMax TMax Range 2’s Complement 0 0 Range –1 –2 TMin 24
Numeric Ranges Unsigned Values Two’s Complement Values UMin = 0 TMin –2 w –1 = 000…0 100…0 2 w – 1 UMax = 2 w –1 – 1 TMax = 111…1 011…1 Other Values Minus 1 111…1 Values for W = 16 Decimal Hex Binary UMax FF FF 11111111 11111111 65535 TMax 7F FF 01111111 11111111 32767 TMin 80 00 10000000 00000000 -32768 -1 FF FF 11111111 11111111 -1 0 00 00 00000000 00000000 0 25
Recommend
More recommend