Bits and Bytes
Bits and Bytes
Topics
› Why bits?
› Representing information as bits
Binary/Hexadecimal
Byte representations
numbers
characters and strings
Instructions
› Bit-level manipulations
Boolean algebra
Expressing in C
Base 10 Number Representation
› That’s why fingers are known as “digits”
› Natural representation for financial transactions
Floating point number cannot exactly represent $1.20
› Even carries through in scientific notation
1.5213 X 104
Implementing Electronically
› Hard to store
ENIAC (First electronic computer) used 10 vacuum tubes / digit
› Hard to transmit
Need high precision to encode 10 signal levels on single wire
› Messy to implement digital logic functions
Addition, multiplication, etc.
Base 2 Number Representation
› Represent 1521310 as 111011011011012
› Represent 1.2010 as 1.0011001100110011[0011]…2
› Represent 1.5213 X 104 as 1.11011011011012 X 213
Electronic Implementation
› Easy to store with bistable elements
› Reliably transmitted
0 on noisy and inaccurate
1 wires 0
3.3V
2.8V
0.5V
0.0V
› Straightforward implementation of arithmetic functions
Programs Refer to Virtual Addresses
› Conceptually very large array of bytes
› Actually implemented with hierarchy of different memory types
SRAM, DRAM, disk
Only allocate for regions actually used by program
› In Unix and Windows NT, 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
› Multiple mechanisms: static, stack, and heap
› In any case, all allocation within single virtual address space
Byte = 8 bits al y
im ar
x c n
He De Bi
› Binary 000000002 to
0 0 0000
111111112 1 1 0001
2 2 0010
3 3 0011
› Decimal: 010 to 25510 4 4 0100
5 5 0101
› Hexadecimal 0016 to FF16 6 6 0110
7 7 0111
Base 16 number representation 8 8 1000
9 9 1001
Use characters ‘0’ to ‘9’ and ‘A’ to ‘F’ A 10 1010
B 11 1011
Write FA1D37B16 in C as 0xFA1D37B C 12 1100
D 13 1101
Or 0xfa1d37b E 14 1110
F 15 1111
Machine Has “Word Size”
› Nominal size of integer-valued data
Including addresses
› Most current machines are 32 bits (4 bytes)
Limits addresses to 4GB
Becoming too small for memory-intensive applications
› High-end systems are 64 bits (8 bytes)
Potentially address 1.8 X 1019 bytes
› Machines support multiple data formats
Fractions or multiples of word size
Always integral number of bytes
32-bit 64-bit Bytes Addr.
Words Words
0000
Addr
0001
Addresses Specify Byte =
0000 0002
Addr
Locations = 0003
0000 0004
› Address of first byte in Addr
= 0005
word 0004 0006
0007
› Addresses of successive 0008
words differ by 4 (32- Addr
= 0009
bit) or 8 (64-bit) 0008
Addr
0010
= 0011
0008 0012
Addr
= 0013
0012 0014
0015
Sizes of C Objects (in Bytes)
C Data Type Compaq Alpha Typical 32-bit
int 4 4
long int 8 4
char 1 1
short 2 2
float 4 4
double 8 8
char * 8 4
Or any other pointer
Issue
› How should bytes within multi-byte word be ordered in memory
Conventions
› Alphas, PC’s are “Little Endian” machines
Least significant byte has lowest address
› Sun’s, Mac’s are “Big Endian” machines
Least significant byte has highest address
Example
› Variable x has 4-byte representation 0x1234567
› Address given by &x is 0x100
Printf directives:
%p: Print pointer
%x: Print Hexadecimal
int a = 15213;
printf("int a = 15213;\n");
show_bytes((pointer) &a, sizeof(int));
Result:
int a = 15213;
0x11ffffcb8 0x6d
0x11ffffcb9 0x3b
0x11ffffcba 0x00
0x11ffffcbb 0x00
int A = 15213; Decimal: 15213
int B = -15213; Binary: 0011 1011 0110 1101
long int C = 15213;
Hex: 3 B 6 D
Sun P
EF Sun Address
FF
FB Hex: E F F F F B 2 C
Binary: 1110 1111 1111 1111 1111 1011 0010
2C
1100
Different compilers & machines assign different locations to objects
Alpha F Sun F
Float F = 15213.0;
00 46
B4 6D
6D B4
46 00
Not
Exclusive-Or (Xor)
• ~A = 1 when A=0
• A^B = 1 when either A=1 or B=1,
but not both
Applied to Digital Systems by Claude Shannon
› 1937 MIT Master’s Thesis
› Reason about networks of relay switches
Encode closed switch as 1, open switch as 0
A ~B Connection when
A&~B | ~A&B
~A B = A^B
Integer Arithmetic
› Z, +, *, –, 0, 1 forms a “ring”
› Addition is “sum” operation
› Multiplication is “product” operation
› – is additive inverse
› 0 is identity for sum
› 1 is identity for product
Boolean Algebra
› {0,1}, |, &, ~, 0, 1 forms a “Boolean algebra”
› Or is “sum” operation
› And is “product” operation
› ~ is “complement” operation (not additive inverse)
› 0 is identity for sum
› 1 is identity for product
Boolean Algebra
Integer Ring
› Commutativity
A| B = B|A A+ B = B +A
A& B = B &A A* B = B*A
› Associativity
(A | B) | C = A | (B | C) (A + B) + C = A + (B + C)
(A & B) & C = A & (B & C) (A * B) * C = A * (B * C)
› Product distributes over sum
A & (B | C) = (A & B) | (A & C) A * (B + C) = A * B + B * C
› Sum and product identities
A| 0 = A A+ 0 = A
A&1 = A A* 1 =A
› Zero is product annihilator
A&0 = 0 A* 0 = 0
› Cancellation of negation
~ (~ A) = A – (– A) = A
Boolean Algebra
Integer Ring
› Boolean: Sum distributes over product
A | (B & C) = (A | B) & (A | C) A + (B * C) (A + B) * (B
+ C)
› Boolean: Idempotency
A|A = A A +AA
“A is true” or “A is true” = “A is true”
A&A = A A *AA
› Boolean: Absorption
A | (A & B) = A A + (A * B) A
“A is true” or “A is true and B is true” = “A is true”
A & (A | B) = A A * (A + B) A
› Boolean: Laws of Complements
A | ~A = 1 A + –A 1
“A is true” or “A is false”
› Ring: Every element has additive inverse
A | ~A 0 A + –A = 0
Boolean Ring
› {0,1}, ^, &, , 0, 1
› Identical to integers mod 2
› is identity operation: (A) = A
A^A=0
Property Boolean Ring
› Commutative sum A^B = B ^A
› Commutative product A& B = B &A
› Associative sum (A ^ B) ^ C = A ^ (B ^ C)
› Associative product (A & B) & C = A & (B & C)
› Prod. over sum A & (B ^ C) = (A & B) ^ (B & C)
› 0 is sum identity A^0 = A
› 1 is prod. identity A&1 = A
› 0 is product annihilator A&0=0
› Additive inverse A^A = 0
DeMorgan’s Laws
› Express & in terms of |, and vice-versa
A & B = ~(~A | ~B)
A and B are true if and only if neither A nor B is false
A | B = ~(~A & ~B)
A or B are true if and only if A and B are not both false
Exclusive-Or using Inclusive Or
A ^ B = (~A & B) | (A & ~B)
Exactly one of A and B is true
A ^ B = (A | B) & ~(A & B)
Either A is true, or B is true, but not both
Operate on Bit Vectors
› Operations applied bitwise
Step *x *y
Begin A B
1 A^B B
2 A^B (A^B)^B = A^(B^B) =
A^0 = A
3 (A^B)^A = (B^A)^A = A
B^(A^A) = B^0 = B
End B A