139
Announcement Homework policy: For any cheating, all students who are involved will get zero for that homework TA will report a group of suspicious cheating two weeks after the home work You can appeal to TA, by bringing all students who are involved to meet TA together. He will ask questions/make a small quiz related to that homework Late submission will have 1 point penalty per day including holiday, unless you have proper explanation

Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Announcement

• Homework policy:

– For any cheating, all students who are involved will

get zero for that homework

– TA will report a group of suspicious cheating two

weeks after the home work

– You can appeal to TA, by bringing all students who

are involved to meet TA together. He will ask

questions/make a small quiz related to that homework

– Late submission will have 1 point penalty per day

including holiday, unless you have proper explanation

Page 2: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Bits, Bytes, and Integers

Page 3: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

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

Page 4: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Binary representations

• Computers store information in bits.

• Humans normally use base 10. Why 10?

• Binary is easier for computers: it is easy to tell two voltage levels apart.

• It would be more complicated to tell apart 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 volts.

• It is also easy to build sensors that tell if a card has a hole in it or not.

• It would be harder to build sensors to distinguish 9 different hole shapes!

• But no matter - with enough bits we can represent any finite set.

Page 5: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Binary Representations

0.0V

0.5V

2.8V

3.3V

0 1 0

Page 6: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Encoding Byte Values

• Byte = 8 bits

– Binary 000000002 to 111111112

– Decimal: 010 to 25510

– Hexadecimal 0016 to FF16

• Base 16 number representation

• Use characters ‘0’ to ‘9’ and ‘A’ to ‘F’

• Write FA1D37B16 in C as

– 0xFA1D37B

– 0xfa1d37b

0 0 0000 1 1 0001 2 2 0010 3 3 0011 4 4 0100 5 5 0101 6 6 0110 7 7 0111 8 8 1000 9 9 1001 A 10 1010 B 11 1011 C 12 1100 D 13 1101 E 14 1110 F 15 1111

Page 7: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Hexadecimal representations

The hexadecimal representation is easy and compact.

A byte's value can range from 000000002 to 111111112.

In decimal, we write these values as 010 to 25510.

In hexadecimal (or just hex) we write 016 to FF16.

(Tabulate the hex digits with binary and decimal representations.)

In C programs, we use 0x before a number to tell the compiler we are writing hex, e.g., 0x12A84.

Exercise: try to convert 0x173A4C to binary, and try to convert

11110010101101101100112 to hex.

Page 8: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Hexadecimal representations

Powers of 2 are easy to write in hex: if x = 2n, in binary, we have a 1

followed by n 0's.

Exercise: fill in the table:

Page 9: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Hexadecimal representations

Converting between decimal and hex in general is trickier.

We divide by 16, get the quotient and remainder, and

repeat.

314156 = 19634 x 16 + 12

19634 = ?? x 16 + ??

...

Answers in hex:

Also try converting 8298410 to hex.

Page 10: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Hexadecimal representations

• Converting hex to decimal is simpler: just multiply by

powers of 16.

• 0x7AF = 7 x162 + 10 x16 + 15 = 196710.

• Now try these conversions:

Page 11: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Hexadecimal arithmetic

Arithmetic in any base, including hexadecimal, is

the same as arithmetic in base 10:

Try the following:

0x502c + 0x8 = ??

0x502c - 0x30 = ??

0x502c + 64 = ??

0x50da - 0x502c = ??

Page 12: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Machine Words

• Machine Has “Word Size”

– Nominal size of integer-valued data

• Including addresses

– Most current machines use 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 1019 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

Page 13: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Word-Oriented Memory Organization

• Addresses Specify Byte

Locations

– Address of first byte in word

– Addresses of successive

words differ by 4 (32-bit) or 8

(64-bit)

0000

0001

0002

0003

0004

0005

0006

0007

0008

0009

0010

0011

32-bit

Words Bytes Addr.

0012

0013

0014

0015

64-bit

Words

Addr

= ??

Addr

= ??

Addr

= ??

Addr

= ??

Addr

= ??

Addr

= ??

0000

0004

0008

0012

0000

0008

Page 14: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Data Representations • C supports various data object sizes depending on the compiler and

the system architecture.

• Due to these differences, a C program might run differently on a 32-

bit and 64-bit PC.

C Data Type Typical 32-bit Intel IA32 x86-64

char 1 1 1

short 2 2 2

int 4 4 4

long 4 4 8

long long 8 8 8

float 4 4 4

double 8 8 8

long double 8 10/12 10/16

pointer 4 4 8

Page 15: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Address of multi-byte object

We've said that every byte in memory as an address.

Then we might ask what is the address of a multi-byte object?

Example: consider the declaration

int x;

on a 32-bit machine. x takes up 4 bytes in memory.

The convention is that the address of a multi-byte object is the address of

the object's first byte.

So if x occupies the addresses 0x100 through 0x103, what is the value of

the expression &x?

Unfortunately, that's not all there is to know: the ordering of bytes within

multi-byte objects differs on different machines!

Page 16: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Byte ordering

Page 17: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

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

Page 18: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

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 0x100 0x101 0x102 0x103

01 23 45 67

0x100 0x101 0x102 0x103

67 45 23 01

Big Endian

Little Endian

01 23 45 67

67 45 23 01

Page 19: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Byte ordering

• Usually, endianness makes no difference to the application programmer.

• However, when binary values are – stored in files shared between machines with different

endianness, or

– transferred over a network between machines with different endianness, the data must be transformed.

• Also, if you are inspecting binary data representing integers, you'll need to be careful to avoid confusion. Consider the following Intel IA32 instruction and its disassembly:

80483bd: 01 05 64 94 04 08 add %eax,0x8049464

Page 20: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

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)

Reading Byte-Reversed Listings

• Disassembly

– Text representation of binary machine code

– Generated by program that reads the machine code

• Example Fragment

• Deciphering Numbers

– Value: 0x12ab

– Pad to 32 bits: 0x000012ab

– Split into bytes: 00 00 12 ab

– Reverse: ab 12 00 00

Page 21: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Examining Data Representations

• Code to Print Byte Representation of Data

– Casting pointer to unsigned char * creates byte array

Printf directives:

%p: Print pointer

%x: Print Hexadecimal

typedef unsigned char *pointer;

void show_bytes(pointer start, int len){

int i;

for (i = 0; i < len; i++)

printf(”%p\t0x%.2x\n",start+i, start[i]);

printf("\n");

}

Page 22: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

show_bytes Execution Example

int a = 15213;

printf("int a = 15213;\n");

show_bytes((pointer) &a, sizeof(int));

Result (Linux):

int a = 15213;

0x11ffffcb8 0x6d

0x11ffffcb9 0x3b

0x11ffffcba 0x00

0x11ffffcbb 0x00

What’s about -15213?

Page 23: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Representing Integers Decimal: 15213

Binary: 0011 1011 0110 1101

Hex: 3 B 6 D

6D

3B

00

00

IA32, x86-64

3B

6D

00

00

Sun

int A = 15213;

93

C4

FF

FF

IA32, x86-64

C4

93

FF

FF

Sun

Two’s complement representation

(Covered later)

int B = -15213;

long int C = 15213;

00

00

00

00

6D

3B

00

00

x86-64

3B

6D

00

00

Sun

6D

3B

00

00

IA32

Page 24: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Int_test #include <stdio.h>

char ch[16]={1,2,3,4,5,-1,-2,-3,-4,-5,256,512,768,1024,1280,-1};

short a[16]={1,2,3,4,5,-1,-2,-3,-4,-5,256,512,768,1024,1280,-1};

int b[16]={1,2,3,4,5,-1,-2,-3,-4,-5,256,512,768,1024,1280,-1};

long long c[16]={1,2,3,4,5,-1,-2,-3,-4,-5,256,512,768,1024,1280,-1};

int main(){

int i; for(i=0;i<16;i++){

printf("char i %d hex %x \n",ch[i],ch[i]); }

for(i=0;i<16;i++){

printf("short i %d hex %x \n",a[i],a[i]); }

for(i=0;i<16;i++){

printf("int i %d hex %x \n",b[i],b[i]); }

for(i=0;i<16;i++){

printf("int i %lld hex %llx \n",c[i],c[i]); }

}

Page 25: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Dump file hexdump -C int_test > dump

00001040 01 02 03 04 05 ff fe fd fc fb 00 00 00 00 00 ff |................|

00001050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|

00001060 01 00 02 00 03 00 04 00 05 00 ff ff fe ff fd ff |................|

00001070 fc ff fb ff 00 01 00 02 00 03 00 04 00 05 ff ff |................|

00001080 01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 |................|

00001090 05 00 00 00 ff ff ff ff fe ff ff ff fd ff ff ff |................|

000010a0 fc ff ff ff fb ff ff ff 00 01 00 00 00 02 00 00 |................|

000010b0 00 03 00 00 00 04 00 00 00 05 00 00 ff ff ff ff |................|

000010c0 01 00 00 00 00 00 00 00 02 00 00 00 00 00 00 00 |................|

000010d0 03 00 00 00 00 00 00 00 04 00 00 00 00 00 00 00 |................|

000010e0 05 00 00 00 00 00 00 00 ff ff ff ff ff ff ff ff |................|

000010f0 fe ff ff ff ff ff ff ff fd ff ff ff ff ff ff ff |................|

00001100 fc ff ff ff ff ff ff ff fb ff ff ff ff ff ff ff |................|

Page 26: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Representing Pointers

Different compilers & machines assign different locations to objects

int B = -15213;

int *P = &B;

x86-64 Sun IA32

EF

FF

FB

2C

D4

F8

FF

BF

0C

89

EC

FF

FF

7F

00

00

Page 27: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

char S[6] = "18243";

Representing Strings

• Strings in C

– Represented by array of characters

– Each character encoded in ASCII format

• Standard 7-bit encoding of character set

• Character “0” has code 0x30

– Digit i has code 0x30+i

– String should be null-terminated

• Final character = 0

• Compatibility

– Byte ordering not an issue WHY?

Linux/Alpha Sun

31

38

32

34

33

00

31

38

32

34

33

00

Page 28: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Program representation

Now we look at how program are represented in the memory

Page 29: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

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

Page 30: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Bitwise Boolean operation

• Next we look at various ways of manipulating, at the bit

level, information stored in memory.

• The bitwise Boolean operators treat data as bit vectors

and perform bitwise operations.

• In C, we have:

Page 31: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Boolean Algebra

• Developed by George Boole in 19th Century

– Algebraic representation of logic

• Encode “True” as 1 and “False” as 0

And

A&B = 1 when both A=1 and B=1

Or

A|B = 1 when either A=1 or B=1

Not

~A = 1 when A=0

Exclusive-Or (Xor)

A^B = 1 when either A=1 or B=1, but not both

Page 32: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Application of Boolean Algebra

• 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

~A

~B

B

Connection when

A&~B | ~A&B

A&~B

~A&B = A^B

Page 33: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

General Boolean Algebras

• Operate on Bit Vectors

– Operations applied bitwise

• All of the Properties of Boolean Algebra Apply

01101001

& 01010101

01000001

01101001

| 01010101

01111101

01101001

^ 01010101

00111100

~ 01010101

10101010 01000001 01111101 00111100 10101010

Page 34: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

LCD screen

We can create eight different colors based on the absence (0) or presence (1) of light sources R, G, and B:

Describe the effect of applying Boolean operations on the following colors:

Blue | Red =

Magenta & Cyan =

Green ^ White =

Page 35: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Representing & Manipulating Sets

• Representation

– Width w bit vector represents subsets of {0, …, w–1}

– aj = 1 if j ∈ A

• 01101001 { 0, 3, 5, 6 }

• 76543210

• 01010101 { 0, 2, 4, 6 }

• 76543210

• Operations

– & Intersection 01000001 { 0, 6 }

– | Union 01111101 { 0, 2, 3, 4, 5, 6 }

– ^ Symmetric difference 00111100 { 2, 3, 4, 5 }

– ~ Complement 10101010 { 1, 3, 5, 7 }

Page 36: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

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

• ~010000012 ➙ 101111102

– ~0x00 ➙ 0xFF

• ~000000002 ➙ 111111112

– 0x69 & 0x55 ➙ 0x41

• 011010012 & 010101012 ➙ 010000012

– 0x69 | 0x55 ➙ 0x7D

• 011010012 | 010101012 ➙ 011111012

Page 37: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Bitwise operation

Here are the truth tables for AND, OR, and XOR

Try this example:

~0x38 = ??

~0x00 = ??

0xfa & 0x12 = ??

0x93 | 0x95 = ??

Page 38: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Bit masks

• Boolean vector operations are useful for implementing bit masks.

Suppose I want to know if the 3rd LS bit of x is 0 or 1.

I can simply AND with the mask 0x4.

Example C code:

if ( x & 0x4 ){

/* Run This */

...

}

Try some more examples:

How to know if either the 6th LS or the 2nd LS bit of x is 0 or 1?

How to turn on the 5th LS bit of x?

Page 39: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

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)

Page 40: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Bitwise Boolean operation

• Note that the bitwise Boolean operators &, |, and ~ in C are different from the logical operators &&, ||, and !.

• In C, in a logical Boolean context, non-zero values map to true (1) and zero values map to false (0).

As a simple example, let x and y be 0x66 an 0x39, respectively.

Now compute the values of the expressions x & y and x && y, what do you get?

Page 41: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

C expression

Write C expression to acquire the following values, assuming that the initial x = 0x98FDECBA and a 32 bit word size of expected output shown in bracket

A. The least significant byte of x, with all other bits set to 1 [ 0xFFFFFFBA].

B. The complement of the least significant byte of x, with all other byte left unchanged [0x98FDEC45].

C. All but the least significant byte of x, with the least significant byte set to 0 [0x98FDEC00].

X | ~0xFF

X ^ 0xFF

X & ~0xFF

Page 42: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Shift Operations

• Left Shift: x << y

– Shift bit-vector x left y positions

– Throw away extra bits on left

• Fill with 0’s on right

• Right Shift: x >> y

– Shift bit-vector x right y positions

• Throw away extra bits on right

– Logical shift

• Fill with 0’s on left

– Arithmetic shift

• Replicate most significant bit on right

• Undefined Behavior

– Shift amount < 0 or ≥ word size

01100010 Argument x

00010000 << 3

00011000 Log. >> 2

00011000 Arith. >> 2

10100010 Argument x

00010000 << 3

00101000 Log. >> 2

11101000 Arith. >> 2

00010000 00010000

00011000 00011000

00011000 00011000

00010000

00101000

11101000

00010000

00101000

11101000

Page 43: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Shift operators

Besides the bitwise logical operators, the shift operators also work directly on bit-level representations:

• The left shift operator << k drops the k most significant bits and

adds k 0's on the right.

• The right shift operator >> k drops the k least significant bits. What

it does on the right depends on which of two forms we're talking

about: – Logical right shift adds k 0's on the left (like a left shift).

– Arithmetical right shift copies the MS bit on the left rather than setting it to 0.

Page 44: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Shift operators

• Here is what right arithmetic shift is doing, graphically:

• Right arithmetic shift has the benefit of preserving the sign of a negative

number represented in two's complement. More on this later.

• Usually logical shift is appropriate for unsigned values and arithmetic shift

is appropriate for signed values.

• Different C compilers may implement shift differently, but usually

arithmetic shift is used for signed values and logical for unsigned values.

Page 45: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Shift

Fill in the table below showing the effects of different shift

operations on single byte quantities

Page 46: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Shift solution

Page 47: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Swap

XOR operation can sometimes be useful. Starting with value a and b in location pointed by variable x and y, fill the value in the table after each step of the procedure.

Page 48: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

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

Page 49: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Binary representations

There are 3 main kinds of binary encodings for numbers:

• Unsigned encodings use traditional binary notation,

beginning at 0.

• Two's complement encoding is the most common signed

encoding, allowing numbers to be negative or positive.

• Floating-point encodings implement scientific notation in

base 2.

Page 50: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Integer representation

Integers come in multiple sizes.

C has char, short, int, long.

Each size can be signed or unsigned.

We write bit vectors for integer size as:

Page 51: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Unsigned representation

Page 52: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Unsigned representation

We will use figure like this to visualize the conversion between

vectors and integers in base 10:

Page 53: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Signed representation

Page 54: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Signed representation

Page 55: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Why 2 complement?

• Try to add 1 with -1 using 2 complement

representation:

Page 56: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Exercises

Page 57: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Encoding Integers

short int x = 15213;

short int y = -15213;

• C short 2 bytes long

• Sign Bit

– For 2’s complement, most significant bit indicates sign

• 0 for nonnegative

• 1 for negative

B2T(X) xw1 2w1

xi 2i

i0

w2

B2U(X) xi 2i

i0

w1

Unsigned Two’s Complement

Sign Bit

Decimal Hex Binary x 15213 3B 6D 00111011 01101101

y -15213 C4 93 11000100 10010011

Page 58: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Encoding Example (Cont.) x = 15213: 00111011 01101101

y = -15213: 11000100 10010011

Weight 15213 -15213

1 1 1 1 1 2 0 0 1 2 4 1 4 0 0 8 1 8 0 0

16 0 0 1 16 32 1 32 0 0 64 1 64 0 0

128 0 0 1 128 256 1 256 0 0 512 1 512 0 0

1024 0 0 1 1024 2048 1 2048 0 0 4096 1 4096 0 0 8192 1 8192 0 0

16384 0 0 1 16384 -32768 0 0 1 -32768

Sum 15213 -15213

Page 59: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Numeric Ranges

• Unsigned Values

– UMin = 0 000…0

– UMax = 2w – 1 111…1

• Two’s Complement Values

– TMin = –2w–1

100…0

– TMax = 2w–1 – 1 011…1

• Other Values

– Minus 1 111…1

Decimal Hex Binary UMax 65535 FF FF 11111111 11111111

TMax 32767 7F FF 01111111 11111111

TMin -32768 80 00 10000000 00000000

-1 -1 FF FF 11111111 11111111

0 0 00 00 00000000 00000000

Values for W = 16

Page 60: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Values for Different Word Sizes

• Observations

– |TMin | = TMax + 1

• Asymmetric range

– UMax = 2 * TMax + 1

W

8 16 32 64

UMax 255 65,535 4,294,967,295 18,446,744,073,709,551,615

TMax 127 32,767 2,147,483,647 9,223,372,036,854,775,807

TMin -128 -32,768 -2,147,483,648 -9,223,372,036,854,775,808

C Programming #include <limits.h>

Declares constants, e.g.,

ULONG_MAX

LONG_MAX

LONG_MIN

Values platform specific

Page 61: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Unsigned & Signed Numeric Values • Equivalence

– Same encodings for

nonnegative values

• Uniqueness

– Every bit pattern represents

unique integer value

– Each representable integer has

unique bit encoding

• Can Invert Mappings

– U2B(x) = B2U-1(x)

• Bit pattern for unsigned

integer

– T2B(x) = B2T-1(x)

• Bit pattern for two’s comp

integer

X B2T(X) B2U(X)

0000 0

0001 1

0010 2

0011 3

0100 4

0101 5

0110 6

0111 7

–8 8

–7 9

–6 10

–5 11

–4 12

–3 13

–2 14

–1 15

1000

1001

1010

1011

1100

1101

1110

1111

0

1

2

3

4

5

6

7

Page 62: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Sign vs. unsigned #include <stdio.h>

char ch[16]={1,2,3,4,-1,-2,-3,-

4,128,129,130,131,255,254,253,252};

unsigned char ch2[16]={1,2,3,4,-1,-2,-3,-

4,128,129,130,131,255,254,253,252};

int main(){

int i;

for(i=0;i<16;i++){

printf("char i %d hex %4x \n",ch[i],(unsigned char)ch[i]); }

for(i=0;i<16;i++){

printf("char i %u hex %4x \n",ch2[i],ch2[i]); }

}

Page 63: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Output

char i 0: 1 hex 1 unsigned char 1 hex 1

char i 1: 2 hex 2 unsigned char 2 hex 2

char i 2: 3 hex 3 unsigned char 3 hex 3

char i 3: 4 hex 4 unsigned char 4 hex 4

char i 4: -1 hex ff unsigned char 255 hex ff

char i 5: -2 hex fe unsigned char 254 hex fe

char i 6: -3 hex fd unsigned char 253 hex fd

char i 7: -4 hex fc unsigned char 252 hex fc

char i 8: -128 hex 80 unsigned char 128 hex 80

char i 9: -127 hex 81 unsigned char 129 hex 81

char i 10: -126 hex 82 unsigned char 130 hex 82

char i 11: -125 hex 83 unsigned char 131 hex 83

char i 12: -1 hex ff unsigned char 255 hex ff

char i 13: -2 hex fe unsigned char 254 hex fe

char i 14: -3 hex fd unsigned char 253 hex fd

char i 15: -4 hex fc unsigned char 252 hex fc

Page 64: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Hexdump

00001010 00 00 00 00 01 02 03 04 ff fe fd fc 80 81 82 83

|................|

00001020 ff fe fd fc 01 02 03 04 ff fe fd fc 80 81 82 83

|................|

00001030 ff fe fd fc 47 43 43 3a 20 28 55 62 75 6e 74 75

|....GCC: (Ubuntu|

Page 65: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

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

Page 66: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

T2U

T2B B2U

Two’s Complement Unsigned

Maintain Same Bit Pattern

x ux X

Mapping Between Signed & Unsigned

U2T

U2B B2T

Two’s Complement Unsigned

Maintain Same Bit Pattern

ux x X

• Mappings between unsigned and two’s complement numbers:

keep bit representations and reinterpret

Page 67: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Mapping Signed Unsigned Signed

0

1

2

3

4

5

6

7

-8

-7

-6

-5

-4

-3

-2

-1

Unsigned

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

Bits

0000

0001

0010

0011

0100

0101

0110

0111

1000

1001

1010

1011

1100

1101

1110

1111

U2T

T2U

Page 68: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Mapping Signed Unsigned Signed

0

1

2

3

4

5

6

7

-8

-7

-6

-5

-4

-3

-2

-1

Unsigned

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

Bits

0000

0001

0010

0011

0100

0101

0110

0111

1000

1001

1010

1011

1100

1101

1110

1111

=

+/- 16

Page 69: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

+ + + + + + • • •

- + + + + + • • •

ux

x

w–1 0

ux x x 0

x 2w

x 0

Relation between Signed & Unsigned

Large negative weight becomes

Large positive weight

T2U

T2B B2U

Two’s Complement Unsigned

Maintain Same Bit Pattern

x ux X

Page 70: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

0

TMax

TMin

–1 –2

0

UMax UMax – 1

TMax TMax + 1

2’s Complement Range

Unsigned Range

Conversion Visualized

• 2’s Comp.

Unsigned

– Ordering Inversion

– Negative Big

Positive

Page 71: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Unsigned to Signed conversion

Page 72: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Try these conversions

Page 73: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Unsigned to Sign

Page 74: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Signed vs. Unsigned in C • Constants

– By default are considered to be signed integers

– Unsigned if have “U” as suffix

0U, 4294967259U

• Casting

– Explicit casting between signed & unsigned same as U2T and T2U

int tx, ty;

unsigned ux, uy;

tx = (int) ux;

uy = (unsigned) ty;

– Implicit casting also occurs via assignments and procedure calls

tx = ux;

uy = ty;

Page 75: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Unsigned to Sign

#include <stdio.h>

char ch[16]={1,2,3,4,-1,-2,-3,-4,128,129,130,131,255,254,253,252};

unsigned char ch2[16]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};

Int main(){

int i;

for(i=0;i<16;i++){

ch2[i] = ch[i];

printf("char i %d: %d hex %4x ",i,ch[i],(unsigned char)ch[i]);

printf("unsigned char %u hex %4x \n",ch2[i],ch2[i]);

}

}

Page 76: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Output

char i 0: 1 hex 1 unsigned char 1 hex 1

char i 1: 2 hex 2 unsigned char 2 hex 2

char i 2: 3 hex 3 unsigned char 3 hex 3

char i 3: 4 hex 4 unsigned char 4 hex 4

char i 4: -1 hex ff unsigned char 255 hex ff

char i 5: -2 hex fe unsigned char 254 hex fe

char i 6: -3 hex fd unsigned char 253 hex fd

char i 7: -4 hex fc unsigned char 252 hex fc

char i 8: -128 hex 80 unsigned char 128 hex 80

char i 9: -127 hex 81 unsigned char 129 hex 81

char i 10: -126 hex 82 unsigned char 130 hex 82

char i 11: -125 hex 83 unsigned char 131 hex 83

char i 12: -1 hex ff unsigned char 255 hex ff

char i 13: -2 hex fe unsigned char 254 hex fe

char i 14: -3 hex fd unsigned char 253 hex fd

char i 15: -4 hex fc unsigned char 252 hex fc

Page 77: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

0 0U == unsigned

-1 0 < signed

-1 0U > unsigned

2147483647 -2147483648 > signed

2147483647U -2147483648 < unsigned

-1 -2 > signed

(unsigned) -1 -2 > unsigned

2147483647 2147483648U < unsigned

2147483647 (int) 2147483648U > signed

Casting Surprises • Expression Evaluation

– If there is a mix of unsigned and signed in single expression,

signed values implicitly cast to unsigned

– Including comparison operations <, >, ==, <=, >=

– Examples for W = 32: TMIN = -2,147,483,648 , TMAX =

2,147,483,647

• Constant1 Constant2 Relation Evaluation

0 0U

-1 0

-1 0U

2147483647 -2147483647-1

2147483647U -2147483647-1

-1 -2

(unsigned)-1 -2

2147483647 2147483648U

2147483647 (int) 2147483648U

Page 78: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Shift with signed and unsigned Consider the following C functions:

int fun1(unsigned word){

return (int) ((word << 24) >> 24);

}

int fun2(unsigned word){

return ((int) word << 24) >> 24;

}

Fill in the following table assuming a 32-bit word size machine. Assume also the right

shifts of signed values are performed arithmetically, while right shifts of unsigned

values are performed logically.

Page 79: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Solution shift with signed and unsigned

Page 80: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Code Security Example

• Similar to code found in FreeBSD’s implementation of

getpeername

• There are legions of smart people trying to find

vulnerabilities in programs

/* Kernel memory region holding user-accessible data */

#define KSIZE 1024

char kbuf[KSIZE];

/* Copy at most maxlen bytes from kernel region to user buffer */

int copy_from_kernel(void *user_dest, int maxlen) {

/* Byte count len is minimum of buffer size and maxlen */

int len = KSIZE < maxlen ? KSIZE : maxlen;

memcpy(user_dest, kbuf, len);

return len;

}

Page 81: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Typical Usage

/* Kernel memory region holding user-accessible data */

#define KSIZE 1024

char kbuf[KSIZE];

/* Copy at most maxlen bytes from kernel region to user buffer */

int copy_from_kernel(void *user_dest, int maxlen) {

/* Byte count len is minimum of buffer size and maxlen */

int len = KSIZE < maxlen ? KSIZE : maxlen;

memcpy(user_dest, kbuf, len);

return len;

}

#define MSIZE 528

void getstuff() {

char mybuf[MSIZE];

copy_from_kernel(mybuf, MSIZE);

printf(“%s\n”, mybuf);

}

Page 82: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Malicious Usage

/* Kernel memory region holding user-accessible data */

#define KSIZE 1024

char kbuf[KSIZE];

/* Copy at most maxlen bytes from kernel region to user buffer */

int copy_from_kernel(void *user_dest, int maxlen) {

/* Byte count len is minimum of buffer size and maxlen */

int len = KSIZE < maxlen ? KSIZE : maxlen;

memcpy(user_dest, kbuf, len);

return len;

}

#define MSIZE 528

void getstuff() {

char mybuf[MSIZE];

copy_from_kernel(mybuf, -MSIZE);

. . .

}

/* Declaration of library function memcpy */

void *memcpy(void *dest, void *src, size_t n);

Page 83: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Signed/Unsigned issue

Consider the following code:

When run with argument length equal to 0, this code should return 0.0. Instead it encounters a memory error. Explain why this happens.

Page 84: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Solution signed/unsigned issue

The problem is because implicitly casting signed to

unsigned. It can be fixed by changing the length

to int or using i < length for comparison

Page 85: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Summary

Casting Signed ↔ Unsigned: Basic Rules

• Bit pattern is maintained

• But reinterpreted

• Can have unexpected effects: adding or subtracting 2w

• Expression containing signed and unsigned int

– int is cast to unsigned!!

Page 86: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

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

Page 87: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Sign Extension • Task:

– Given w-bit signed integer x

– Convert it to w+k-bit integer with same value

• Rule:

– Make k copies of sign bit:

– X = xw–1 ,…, xw–1 , xw–1 , xw–2 ,…, x0

k copies of MSB

• • • X

X • • • • • •

• • •

w

w k

Page 88: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Sign Extension Example

• Converting from smaller to larger integer data type

• C automatically performs sign extension

short int x = 15213;

int ix = (int) x;

short int y = -15213;

int iy = (int) y;

Decimal Hex Binary

x 15213 3B 6D 00111011 01101101

ix 15213 00 00 3B 6D 00000000 00000000 00111011 01101101

y -15213 C4 93 11000100 10010011

iy -15213 FF FF C4 93 11111111 11111111 11000100 10010011

Page 89: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Signed and Unsigned in C

Page 90: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Integer representation and printf

Page 91: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Promotion

Page 92: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Truncation

Truncation occurs when a “big” representation is

converted to a smaller representation.

Strange results can occur: try converting 53,000

from 32 bits to 16 bits.

Page 93: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Advice on sign-ness

• Try to avoid using unsigned integers whenever

possible.

• Sometimes, however, unsigned integers are

very useful, e.g. for packing Boolean flags into a

single word.

• Be careful, and understand what is happening at

the machine level.

Page 94: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Truncate

Suppose we truncate a 4-bit value to a 3-bit value, fill in the

following table:

Page 95: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Solution Truncate

Page 96: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Summary:

Expanding, Truncating: Basic Rules

• Expanding (e.g., short int to int)

– Unsigned: zeros added

– Signed: sign extension

– Both yield expected result

• Truncating (e.g., unsigned to unsigned short)

– Unsigned/signed: bits are truncated

– Result reinterpreted

– Unsigned: mod operation

– Signed: similar to mod

– For small numbers yields expected behaviour

Page 97: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

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

Page 98: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Negation: Complement & Increment • Claim: Following Holds for 2’s Complement

~x + 1 == -x

• Complement

– Observation: ~x + x == 1111…111 == -1

• Complete Proof?

1 0 0 1 0 1 1 1 x

0 1 1 0 1 0 0 0 ~x +

1 1 1 1 1 1 1 1 -1

Page 99: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Complement & Increment Examples

Decimal Hex Binary x 15213 3B 6D 00111011 01101101

~x -15214 C4 92 11000100 10010010

~x+1 -15213 C4 93 11000100 10010011

y -15213 C4 93 11000100 10010011

x = 15213

Decimal Hex Binary 0 0 00 00 00000000 00000000

~0 -1 FF FF 11111111 11111111

~0+1 0 00 00 00000000 00000000

x = 0

Page 100: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Unsigned addition

Page 101: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Unsigned Addition

• Standard Addition Function

– Ignores carry output

• Implements Modular Arithmetic

s = UAddw(u , v) = u + v mod 2w

UAddw(u,v) u v u v 2w

u v 2w u v 2w

• • •

• • •

u

v +

• • • u + v

• • •

True Sum: w+1 bits

Operands: w bits

Discard Carry: w bits UAddw(u , v)

Page 102: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

02

46

810

1214

0

2

4

6

8

10

12

14

0

4

8

12

16

20

24

28

32

Integer Addition

Visualizing (Mathematical) Integer Addition

• Integer Addition

– 4-bit integers u, v

– Compute true

sum Add4(u , v)

– Values increase

linearly with u and

v

– Forms planar

surface

Add4(u , v)

u

v

Page 103: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

02

46

810

1214

0

2

4

6

8

10

12

14

0

2

4

6

8

10

12

14

16

Visualizing Unsigned Addition

• Wraps Around

– If true sum ≥ 2w

– At most once

0

2w

2w+1

UAdd4(u , v)

u

v

True Sum

Modular Sum

Overflow

Overflow

Page 104: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Mathematical Properties

• Modular Addition Forms an Abelian Group

– Closed under addition

0 UAddw(u , v) 2w –1

– Commutative

UAddw(u , v) = UAddw(v , u)

– Associative

UAddw(t, UAddw(u , v)) = UAddw(UAddw(t, u ), v)

– 0 is additive identity

UAddw(u , 0) = u

– Every element has additive inverse

• Let UCompw (u ) = 2w – u

UAddw(u , UCompw (u )) = 0

Page 105: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Two’s Complement Addition

• TAdd and UAdd have Identical Bit-Level Behavior

– Signed vs. unsigned addition in C:

int s, t, u, v;

s = (int) ((unsigned) u + (unsigned) v);

t = u + v

– Will give s == t

• • •

• • •

u

v +

• • • u + v

• • •

True Sum: w+1 bits

Operands: w bits

Discard Carry: w bits TAddw(u , v)

Page 106: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

TAdd Overflow

• Functionality

– True sum

requires w+1 bits

– Drop off MSB

– Treat remaining

bits as 2’s comp.

integer –2w –1–1

–2w

0

2w –1

2w–1

True Sum

TAdd Result

1 000…0

1 011…1

0 000…0

0 100…0

0 111…1

100…0

000…0

011…1

PosOver

NegOver

Page 107: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

-8-6

-4-2

02

46

-8

-6

-4

-2

0

2

4

6

-8

-6

-4

-2

0

2

4

6

8

Visualizing 2’s Complement Addition

• Values

– 4-bit two’s comp.

– Range from -8 to +7

• Wraps Around

– If sum 2w–1

• Becomes

negative

• At most once

– If sum < –2w–1

• Becomes positive

• At most once

TAdd4(u , v)

u

v

PosOver

NegOver

Page 108: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Characterizing TAdd

• Functionality

– True sum requires

w+1 bits

– Drop off MSB

– Treat remaining bits

as 2’s comp. integer

TAddw (u,v)

u v 2w1

u v TMinw

u v TMinw u v TMaxw

u v 2w1

TMaxw u v

(NegOver)

(PosOver)

u

v

< 0 > 0

< 0

> 0

Negative Overflow

Positive Overflow

TAdd(u , v)

2w

2w

Page 109: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Overflow

#include <stdio.h>

int main(){

int i;

char ch = 128;

printf("char ch %d result %d hex %4x

\n",ch,(char)(ch+ch),(unsigned char)(ch+ch));

ch = 127;

printf("char ch %d result %d hex %4x

\n",ch,(char)(ch+ch),(unsigned char)(ch+ch));

}

Page 110: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Output

char ch -128 result 0 hex 0

char ch 127 result -2 hex fe

Page 111: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Multiplication

• Computing Exact Product of w-bit numbers x, y

– Either signed or unsigned

• Ranges

– Unsigned: 0 ≤ x * y ≤ (2w – 1) 2 = 22w – 2w+1 + 1

• Up to 2w bits

– Two’s complement min: x * y ≥ (–2w–1)*(2w–1–1) = –22w–2 + 2w–1

• Up to 2w–1 bits

– Two’s complement max: x * y ≤ (–2w–1) 2 = 22w–2

• Up to 2w bits, but only for (TMinw)2

• Maintaining Exact Results

– Would need to keep expanding word size with each product

computed

– Done in software by “arbitrary precision” arithmetic packages

Page 112: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Unsigned Multiplication in C

• Standard Multiplication Function

– Ignores high order w bits

• Implements Modular Arithmetic

UMultw(u , v) = u · v mod 2w

• • •

• • •

u

v *

• • • u · v

• • •

True Product: 2*w bits

Operands: w bits

Discard w bits: w bits UMultw(u , v)

• • •

Page 113: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Signed Multiplication in C

• Standard Multiplication Function

– Ignores high order w bits

– Some of which are different for

signed vs. unsigned

multiplication

– Lower bits are the same

• • •

• • •

u

v *

• • • u · v

• • •

True Product: 2*w bits

Operands: w bits

Discard w bits: w bits TMultw(u , v)

• • •

Page 114: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Power-of-2 Multiply with Shift

• Operation

– u << k gives u * 2k

– Both signed and unsigned

• Examples

– u << 3 == u * 8

– u << 5 - u << 3 == u * 24

– Most machines shift and add faster than multiply

• Compiler generates this code automatically

• • •

0 0 1 0 0 0 •••

u

2k *

u · 2k True Product: w+k bits

Operands: w bits

Discard k bits: w bits UMultw(u , 2k)

•••

k

• • • 0 0 0 •••

TMultw(u , 2k) 0 0 0 ••• •••

Page 115: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

leal (%eax,%eax,2), %eax

sall $2, %eax

Compiled Multiplication Code

• C compiler automatically generates shift/add code when

multiplying by constant

int mul12(int x)

{

return x*12;

}

t <- x+x*2

return t << 2;

C Function

Compiled Arithmetic Operations Explanation

Page 116: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Unsigned Power-of-2 Divide with Shift

• Quotient of Unsigned by Power of 2

– u >> k gives u / 2k

– Uses logical shift

Division Computed Hex Binary x 15213 15213 3B 6D 00111011 01101101

x >> 1 7606.5 7606 1D B6 00011101 10110110

x >> 4 950.8125 950 03 B6 00000011 10110110

x >> 8 59.4257813 59 00 3B 00000000 00111011

0 0 1 0 0 0 •••

u

2k /

u / 2k Division:

Operands: •••

k ••• •••

••• 0 0 0 ••• •••

u / 2k ••• Result:

.

Binary Point

0

0 0 0 ••• 0

Page 117: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

shrl $3, %eax

Compiled Unsigned Division Code

• Uses logical shift for unsigned

• For Java Users

– Logical shift written as >>>

unsigned udiv8(unsigned x)

{

return x/8;

}

# Logical shift

return x >> 3;

C Function

Compiled Arithmetic Operations Explanation

Page 118: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Signed Power-of-2 Divide with Shift • Quotient of Signed by Power of 2

– x >> k gives x / 2k

– Uses arithmetic shift

– Rounds wrong direction when u < 0

0 0 1 0 0 0 •••

x

2k /

x / 2k Division:

Operands: •••

k ••• •••

••• 0 ••• •••

RoundDown(x / 2k) ••• Result:

.

Binary Point

0 •••

Division Computed Hex Binary y -15213 -15213 C4 93 11000100 10010011

y >> 1 -7606.5 -7607 E2 49 11100010 01001001

y >> 4 -950.8125 -951 FC 49 11111100 01001001

y >> 8 -59.4257813 -60 FF C4 11111111 11000100

Page 119: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Correct Power-of-2 Divide • Quotient of Negative Number by Power of 2

– Want x / 2k (Round Toward 0)

– Compute as (x+2k-1)/ 2k

• In C: (x + (1<<k)-1) >> k

• Biases dividend toward 0

Case 1: No rounding

Divisor:

Dividend:

0 0 1 0 0 0 •••

u

2k /

u / 2k

•••

k

1 ••• 0 0 0 •••

1 ••• 0 1 1 ••• .

Binary Point

1

0 0 0 1 1 1 ••• +2k –1 •••

1 1 1 •••

1 ••• 1 1 1 •••

Biasing has no effect

Page 120: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Correct Power-of-2 Divide (Cont.)

Divisor:

Dividend:

Case 2: Rounding

0 0 1 0 0 0 •••

x

2k /

x / 2k

•••

k 1 ••• •••

1 ••• 0 1 1 ••• .

Binary Point

1

0 0 0 1 1 1 ••• +2k –1 •••

1 ••• •••

Biasing adds 1 to final result

•••

Incremented by 1

Incremented by 1

Page 121: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

testl %eax, %eax

js L4

L3:

sarl $3, %eax

ret

L4:

addl $7, %eax

jmp L3

Compiled Signed Division Code

• Uses arithmetic shift for int

• For Java Users

– Arith. shift written as >>

int idiv8(int x)

{

return x/8;

}

if x < 0

x += 7;

# Arithmetic shift

return x >> 3;

C Function

Compiled Arithmetic Operations Explanation

Page 122: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Arithmetic: Basic Rules

• Addition:

– Unsigned/signed: Normal addition followed by truncate,

same operation on bit level

– Unsigned: addition mod 2w

• Mathematical addition + possible subtraction of 2w

– Signed: modified addition mod 2w (result in proper range)

• Mathematical addition + possible addition or subtraction of

2w

• Multiplication:

– Unsigned/signed: Normal multiplication followed by truncate,

same operation on bit level

– Unsigned: multiplication mod 2w

– Signed: modified multiplication mod 2w (result in proper range)

Page 123: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Arithmetic: Basic Rules

• Unsigned ints, 2’s complement ints are isomorphic rings:

isomorphism = casting

• Left shift

– Unsigned/signed: multiplication by 2k

– Always logical shift

• Right shift

– Unsigned: logical shift, div (division + round to zero) by 2k

– Signed: arithmetic shift

• Positive numbers: div (division + round to zero) by 2k

• Negative numbers: div (division + round away from zero) by

2k

Use biasing to fix

Page 124: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Code Security Example #2

• SUN XDR library

– Widely used library for transferring data between machines

void* copy_elements(void *ele_src[], int ele_cnt, size_t ele_size);

ele_src

malloc(ele_cnt * ele_size)

Page 125: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

XDR Code

void* copy_elements(void *ele_src[], int ele_cnt, size_t ele_size) {

/*

* Allocate buffer for ele_cnt objects, each of ele_size bytes

* and copy from locations designated by ele_src

*/

void *result = malloc(ele_cnt * ele_size);

if (result == NULL)

/* malloc failed */

return NULL;

void *next = result;

int i;

for (i = 0; i < ele_cnt; i++) {

/* Copy object i to destination */

memcpy(next, ele_src[i], ele_size);

/* Move pointer to next memory region */

next += ele_size;

}

return result;

}

Page 126: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

XDR Vulnerability

• What if:

– ele_cnt = 220 + 1

– ele_size = 4096 = 212

– Allocation = ??

• How can I make this function secure?

malloc(ele_cnt * ele_size)

Page 127: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Today: Integers

• Representation: unsigned and signed

• Conversion, casting

• Expanding, truncating

• Addition, negation, multiplication, shifting

• Summary

Page 128: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Properties of Unsigned Arithmetic

• Unsigned Multiplication with Addition Forms Commutative Ring

– Addition is commutative group

– Closed under multiplication

0 UMultw(u , v) 2w –1

– Multiplication Commutative

UMultw(u , v) = UMultw(v , u)

– Multiplication is Associative

UMultw(t, UMultw(u , v)) = UMultw(UMultw(t, u ), v)

– 1 is multiplicative identity

UMultw(u , 1) = u

– Multiplication distributes over addtion

UMultw(t, UAddw(u , v)) = UAddw(UMultw(t, u ), UMultw(t, v))

Page 129: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Properties of Two’s Comp. Arithmetic

• Isomorphic Algebras

– Unsigned multiplication and addition

• Truncating to w bits

– Two’s complement multiplication and addition

• Truncating to w bits

• Both Form Rings

– Isomorphic to ring of integers mod 2w

• Comparison to (Mathematical) Integer Arithmetic

– Both are rings

– Integers obey ordering properties, e.g.,

u > 0 u + v > v

u > 0, v > 0 u · v > 0

– These properties are not obeyed by two’s comp. arithmetic

TMax + 1 == TMin

15213 * 30426 == -10030 (16-bit words)

Page 130: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Why Should I Use Unsigned?

• Don’t Use Just Because Number Nonnegative

– Easy to make mistakes

unsigned i;

for (i = cnt-2; i >= 0; i--)

a[i] += a[i+1];

– Can be very subtle

#define DELTA sizeof(int)

int i;

for (i = CNT; i-DELTA >= 0; i-= DELTA)

. . .

• Do Use When Performing Modular Arithmetic

– Multiprecision arithmetic

• Do Use When Using Bits to Represent Sets

– Logical right shift, no sign extension

Page 131: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Integer C Puzzles

• (x > 0) || (x-1 < 0)

• (x&7) != 7 || (x<<29 < 0)

• (x*x) >= 0

• x<0 || -x <=0

• x>0 || -x >=0

• x+y == uy+ux

int x = foo();

int y = bar();

unsigned ux = x;

unsigned uy = y;

Initialization

Page 132: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Integer C Puzzles • (x > 0) || (x-1 < 0)

False, in case x = -2,147,483,648 (Tmin)

• (x&7) != 7 || (x<<29 < 0)

True ( bit 2 is the sign bit)

• (x*x) >= 0

False, when x is 0xFFFF, x*x is 0xFFFE0001

• x<0 || -x <=0

True, if x is non-negative, -x is non positive

• x>0 || -x >=0

False, in case x = -2,147,483,648 (Tmin)

• x+y == uy+ux

True, two’s complement and unsigned addition have same value and commutative

int x = foo();

int y = bar();

unsigned ux = x;

unsigned uy = y;

Initialization

Page 133: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Homework

• Write code for a function with the following prototype:

int lower_bits(int x, int n);

/* Clear all but least significant n bits of x

Example: x = 0x78ABCDEF, n = 8 -> 0xEF

n = 16 -> 0xCDEF

assume 1 <= n <= w

*/

Be careful of the case n ==w

Page 134: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Questions?

Page 135: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Overflow

• Since almost all representations use a finite number of bits, overflow is a big problem.

• What is the value of 200 * 300 * 400 * 500? Let's write the C

program and see.

• Floating point is different but still troublesome! Let's write a C program to evaluate the following expressions:

(3.14+1e20)-1e20

3.14+(1e20-1e20)

(What do you get, and can you guess why?)

• In this course, we will focus on C representations, but the issues are general issues that come up with any language.

Page 136: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

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

• • •

Page 137: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Information storage in virtual memory

• Normally we group bits into 8-bit called a byte.

• Each program sees memory as a very large array of bytes called virtual memory.

• Every byte in virtual memory has a unique virtual address identifying it.

• The set of all possible virtual addresses is called the virtual address space.

• Compilers subdivide the virtual address space into chunks that store different program objects, e.g.: – program data

– program instructions

– control information

Page 138: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Virtual memory organization

Here is how virtual

memory is laid out in

Linux when “hello

world” is running

Page 139: Announcement - Asian Institute of Technologyesl.ait.ac.th/courses/csa/class2_new.pdf · Announcement •Homework policy: –For any cheating, all students who are involved will get

Pointer variables

• Any pointer in C is the virtual address of the rst byte of some block of storage.

• The C compiler maintains information about the types of objects it stores in virtual memory.

• For example, it might know that the 4 bytes of memory beginning at

address 100110101010011002 happens to store an int variable named x.

Consider the following C code inside some function:

int x;

int *px = &x;

*px = 0;

What does the corresponding virtual memory look like?