Representing and Manipulating Integers. Jo, Heeseung

Similar documents
Representing Integers. Jin-Soo Kim Computer Systems Laboratory Sungkyunkwan University

Jin-Soo Kim Systems Software & Architecture Lab. Seoul National University. Integers. Spring 2019

Manipulating Integers

Representing and Manipulating Integers Part I

Representing Integers

Systems Programming and Computer Architecture ( )

Lecture 5-6: Bits, Bytes, and Integers

Integers. Today. Next time. ! Numeric Encodings! Programming Implications! Basic operations. ! Floats

CS140 Lecture 08: Data Representation: Bits and Ints. John Magee 13 February 2017

CS 33. Data Representation, Part 2. CS33 Intro to Computer Systems VII 1 Copyright 2018 Thomas W. Doeppner. All rights reserved.

Bits, Bytes, and Integers August 26, 2009

Representa7on of integers: unsigned and signed Conversion, cas7ng Expanding, trunca7ng Addi7on, nega7on, mul7plica7on, shiaing

CS 33. Data Representation, Part 2. CS33 Intro to Computer Systems VIII 1 Copyright 2017 Thomas W. Doeppner. All rights reserved.

Systems 1. Integers. Unsigned & Twoʼs complement. Addition, negation, multiplication

Integers Sep 3, 2002

Integers. Dr. Steve Goddard Giving credit where credit is due

CS 270: Computer Organization. Integer Arithmetic Operations

Bits, Bytes, and Integers

But first, encode deck of cards. Integer Representation. Two possible representations. Two better representations WELLESLEY CS 240 9/8/15

Arithmetic and Bitwise Operations on Binary Data

Carnegie Mellon. Bryant and O Hallaron, Computer Systems: A Programmer s Perspective, Third Edition

Computer Systems CEN591(502) Fall 2011

Bits, Bytes, and Integers Part 2

Topics of this Slideset. CS429: Computer Organization and Architecture. Encoding Integers: Unsigned. C Puzzles. Integers

CS429: Computer Organization and Architecture

Integer Encoding and Manipulation

ICS Instructor: Aleksandar Kuzmanovic TA: Ionut Trestian Recitation 2

Arithmetic and Bitwise Operations on Binary Data

Bits, Bytes and Integers Part 1

Bits, Bytes and Integers

Bits and Bytes: Data Presentation Mohamed Zahran (aka Z)

Integers II. CSE 351 Autumn Instructor: Justin Hsia

BITS, BYTES, AND INTEGERS

Integers II. CSE 351 Autumn Instructor: Justin Hsia

Foundations of Computer Systems

Bits, Bytes, and Integers

Integers II. CSE 351 Autumn 2018

Computer Organization: A Programmer's Perspective

Integer Arithmetic. CS 347 Lecture 03. January 20, 1998

Page # CISC360. Integers Sep 11, Encoding Integers Unsigned. Encoding Example (Cont.) Topics. Twoʼs Complement. Sign Bit

Integer Representation

Arithmetic Operators. Portability: Printing Numbers

Bitwise Data Manipulation. Bitwise operations More on integers

Page 1. Where Have We Been? Chapter 2 Representing and Manipulating Information. Why Don t Computers Use Base 10?

CS 33. Data Representation, Part 1. CS33 Intro to Computer Systems VII 1 Copyright 2017 Thomas W. Doeppner. All rights reserved.

C Puzzles! Taken from old exams. Integers Sep 3, Encoding Integers Unsigned. Encoding Example (Cont.) The course that gives CMU its Zip!

Bits and Bytes. Why bits? Representing information as bits Binary/Hexadecimal Byte representations» numbers» characters and strings» Instructions

SIGNED AND UNSIGNED SYSTEMS

REMEMBER TO REGISTER FOR THE EXAM.

CS367 Test 1 Review Guide

Bits, Bytes, and Integers

Page 1 CISC360. Encoding Integers Unsigned. Integers Sep 8, Numeric Ranges. Encoding Example (Cont.)

Bits, Bytes, and Integers. Bits, Bytes, and Integers. The Decimal System and Bases. Everything is bits. Converting from Decimal to Binary

CS 107 Lecture 3: Integer Representations

Simple Data Types in C. Alan L. Cox

Bits and Bytes January 13, 2005

CSE 351 Midterm - Winter 2017

Integer Representation Floating point Representation Other data types

2.1. Unit 2. Integer Operations (Arithmetic, Overflow, Bitwise Logic, Shifting)

Computer Architecture and System Software Lecture 02: Overview of Computer Systems & Start of Chapter 2

Computer System and programming in C

Why Don t Computers Use Base 10? Lecture 2 Bits and Bytes. Binary Representations. Byte-Oriented Memory Organization. Base 10 Number Representation

THE FUNDAMENTAL DATA TYPES

CSE 351 Midterm - Winter 2015 Solutions

CS107, Lecture 2 Bits and Bytes; Integer Representations

Why Don t Computers Use Base 10? Lecture 2 Bits and Bytes. Binary Representations. Byte-Oriented Memory Organization. Base 10 Number Representation

These are reserved words of the C language. For example int, float, if, else, for, while etc.

Programming in C++ 5. Integral data types

Internal representation. Bitwise operators

Internal representation. Bitwise operators

Internal representation. Bitwise operators

AGENDA Binary Operations CS 3330 Samira Khan

Hardware: Logical View

CS107, Lecture 3 Bits and Bytes; Bitwise Operators

Semester Transition Point. EE 109 Unit 11 Binary Arithmetic. Binary Arithmetic ARITHMETIC

Chapter 4. Operations on Data

COMP2611: Computer Organization. Data Representation

Chapter 7. Basic Types

World Inside a Computer is Binary

Declaration. Fundamental Data Types. Modifying the Basic Types. Basic Data Types. All variables must be declared before being used.

CS 3843 Final Exam Fall 2012

Floating Point Puzzles. Lecture 3B Floating Point. IEEE Floating Point. Fractional Binary Numbers. Topics. IEEE Standard 754

Data Types. Data Types. Integer Types. Signed Integers

File Handling in C. EECS 2031 Fall October 27, 2014

Computer Organization & Systems Exam I Example Questions

Module 2: Computer Arithmetic

CSCI2467: Systems Programming Concepts

Bits, Bytes, and Integer

CS356: Discussion #3 Floating-Point Operations. Marco Paolieri

Operations On Data CHAPTER 4. (Solutions to Odd-Numbered Problems) Review Questions

Goals for this Week. CSC 2400: Computer Systems. Bits, Bytes and Data Types. Binary number system. Finite representations of binary integers

Chapter 2 Float Point Arithmetic. Real Numbers in Decimal Notation. Real Numbers in Decimal Notation

1.3b Type Conversion

Important From Last Time

COMP2121: Microprocessors and Interfacing. Number Systems

Systems I. Floating Point. Topics IEEE Floating Point Standard Rounding Floating Point Operations Mathematical properties

Floating Point. CSE 351 Autumn Instructor: Justin Hsia

CS61B Lecture #14: Integers. Last modified: Wed Sep 27 15:44: CS61B: Lecture #14 1

CSE 351 Midterm - Winter 2015

Floating-Point Data Representation and Manipulation 198:231 Introduction to Computer Organization Lecture 3

Transcription:

Representing and Manipulating Integers Jo, Heeseung

Unsigned Integers Encoding unsigned integers B [ bw 1, bw 2,..., b0 ] x = 0000 0111 1101 0011 2 D( B) w 1 b i i 0 2 i D(x) = 2 10 + 2 9 + 2 8 + 2 7 + 2 6 + 2 4 + 2 1 + 2 0 = 1024 + 512 + 256 + 128 + 64 + 16 + 2 + 1 = 2003 What is the range for unsigned values with w bits? 2

Signed Integers (1) Encoding positive numbers Same as unsigned numbers Encoding negative numbers Sign-magnitude representation Ones' complement representation Two's complement representation 3

Signed Integers (2) Sign-magnitude representation b w-1 b w-2 b 1 b 0 Sign bit bw 1 S( B) ( 1) Two zeros Magnitude w 2 i 0 - [000 00], [100 00] Used for floating-point numbers b i 2 i 1101 1100 1011 1111 1110-6 -7-5 -4-3 -2-1 1010 1001 0000 0001 0010 0 1 2 3 0 1000 7 4 5 6 0111 0110 0011 0100 0101 4

Signed Integers (3) Ones' complement representation b w-1 b w-2 b 1 b 0 Sign bit w 2 w 1 O( B) b w 1(2 1) bi 2 i 0 Easy to find -n Two zeros - [000 00], [111 11] No longer used i 1101 1100 1011 1111 1110-1 0-2 -3-4 -5-6 1010 1001 0000 0001 0010 0 1 2 3-7 1000 7 4 5 6 0111 0110 0011 0100 0101 5

Signed Integers (4) Two's complement representation b w-1 b w-2 b 1 b 0 Sign bit w 2 w 1 O( B) b w 1 2 bi 2 i 0 Unique zero Easy for hardware - leading 0 0 - leading 1 < 0 Used by almost all modern machines i 1101 1100 1011 1111 1110-2 -1-3 -4-5 -6-7 1010 1001 0000 0001 0010 0 1 2 3-8 1000 7 4 5 6 0111 0110 0011 0100 0101 6

Representation of Negative Numbers 7

Signed Integers (5) Two's complement representation (cont'd) Following holds for two's complement Complement - Observation: ~x + x == 1111 11 2 == -1 Increment ~ x + 1 == - x ~x + x == -1 ~x + x + (-x + 1) == -1 + (-x + 1) ~x + 1 == -x 8

Numeric Ranges (1) Unsigned values UMin = 0 [000 00] UMax = 2 w - 1 [111 11] Two's complement values TMin = - 2 w-1 [100 00] TMax = 2 w-1-1 [011 11] Values for w = 16 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 9

Numeric Ranges (2) Values for different word sizes w = 8 w = 16 w = 32 w = 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 Observations TMin = TMax + 1 (Asymmetric range) UMax = 2 * TMax + 1 In C programming #include <limits.h> INT_MIN, INT_MAX, LONG_MIN, LONG_MAX, UINT_MAX, Values platform-specific 10

Type Conversion (1) Unsigned: w bits -> w+k bits Zero extension: just fill k bits with 0's unsigned short x = 2003; unsigned ix = (unsigned) x; x w = 16 0 0 0 0 0 1 1 1 1 1 0 1 0 0 1 1 ix 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 1 0 0 1 1 k = 16 w = 16 11

Type Conversion (2) Signed: w bits -> w+k bits Given w-bit signed integer x Convert it to w+k-bit integer with same value Sign extension Make k copies of sign bit X Sign bit w X k w 12

Type Conversion (3) Sign extension example Converting from smaller to larger integer type C automatically performs sign extension short int x = 2003; int ix = (int) x; short int y = -2003; int iy = (int) y; Decimal Hex Binary x 2003 07 D3 00000111 11010011 ix 2003 00 00 07 D3 00000000 00000000 00000111 11010011 y -2003 F8 2D 11111000 00101101 iy -2003 FF FF F8 2D 11111111 11111111 11111000 00101101 13

Type Conversion (4) Unsigned & Signed: w+k bits -> w bits Just truncate it to lower w bits Equivalent to computing x mod 2 w unsigned int x = 0xcafebabe; unsigned short ix = (unsigned short) x; int y = 0x2003beef; short iy = (short) y; Decimal Hex Binary x 3405691582 CA FE BA BE 11001010 11111110 10111010 10111110 ix 47806 BA BE 10111010 10111110 y 537116399 20 03 BE EF 00100000 00000011 10111110 11101111 iy -16657 BE EF 10111110 11101111 14

Type Conversion (5) Unsigned -> Signed The same bit pattern is interpreted as a signed number U 2 w 2 w-1 0 w 1 2Tw ( x) w w 1 Unsigned x, x 2 Two s complement +2 w-1 0, x x -2 w-1 2 2 unsigned short x = 2003; short ix = (short) x; unsigned short y = 0xbabe; short iy = (short) y; Decimal Hex Binary x 2003 07 D3 00000111 11010011 ix 2003 07 D3 00000111 11010011 y 47806 BA BE 10111010 10111110 iy -17730 BA BE 10111010 10111110 15

Type Conversion (6) Signed -> Unsigned Ordering inversion Negative -> Big positive T 2U w Two's complement +2 w-1 ( x) w x 2, x x, x 2 w 2 w-1 0 0 short x = 2003; unsigned short ix = (unsigned short) x; short y = -2003; unsigned short iy = (unsigned short) y; Decimal Hex Binary x 2003 07 D3 00000111 11010011 0-2 w-1 0 Unsigned ix 2003 07 D3 00000111 11010011 y -2003 F8 2D 11111000 00101101 iy 63533 F8 2D 11111000 00101101 16

Type Casting in C (1) Constants By default, considered to be signed integers Unsigned if have "U" or "u" as suffix Type casting - 0U, 12345U, 0x1A2Bu Explicit casting Implicit casting via - Assignments - Procedure calls int tx, ty; unsigned ux, uy; tx = (int) ux; uy = (unsigned) ty; int f(unsigned); f(ty); tx = ux; 17

Type Casting in C (2) Expression evaluation If mix unsigned and signed in single expression, signed values implicitly cast to unsigned Including comparison operations <, >, ==, <=, >= Expression Type Evaluation 0 == 0U -1 < 0-1 < 0U -1 > -2 (unsigned) -1 > -2 2147483647 > -2147483647-1 2147483647U > -2147483647-1 2147483647 > (int) 2147483648U unsigned signed unsigned signed unsigned signed unsigned signed True True False True True True False True 18

Type Casting in C (3) Example 1-1 무한반복됨 Example 1-2 int main () { unsigned i; for (i = 10; i >= 0; i--) printf ("%u\n", i); } int main () { unsigned i; for (i = 10; i > 0; i--) printf ("%u\n", i); } 19

Type Casting in C (4) Example 2 len 에 0 이거나 30 억이면무한반복 int sum_array (int a[], unsigned len) { int i; int result = 0; for (i = 0; i <= len - 1; i++) result += a[i]; } return result; 20

Type Casting in C (5) Example 3-1 void copy_mem1 (char *src, char *dest, unsigned len) { unsigned i; for (i = 0; i < len; i++) *dest++ = *src++; } Example 3-2 asdf 30 억무한반복아님, 정상임 void copy_mem2 (char *src, char *dest, unsigned len) { int i; for (i = 0; i < len; i++) *dest++ = *src++; } 21

Type Casting in C (6) Example 3-3 void copy_mem3 (char *src, char *dest, unsigned len) { for (; len > 0; len--) *dest++ = *src++; } Example 3-4 30 억이면음수로바뀌고처리안됨 void copy_mem4 (char *src, char *dest, unsigned len) { for (; (int) len > 0; len--) *dest++ = *src++; } 22

Type Casting in C (7) Example 4 EOF 는 -1 값 #include <stdio.h> int main () { unsigned char c; } while ((c = getchar())!= EOF) putchar (c); 23

Type Casting in C (8) Lessons There are many tricky situations when you use unsigned integers - hard to debug Do not use just because numbers are nonnegative Use "unsigned" for large positive numbers within limited bits Use "unsigned" when you need collections of bits with no numeric interpretation ("flags") Few languages other than C support unsigned integers 24

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 0x69 ^ 0x55 --> 0x4C 01101001 2 ^ 01010101 2 --> 00111100 2 25

Logic Operations in C Contrast to logical operators &&,,! View 0 as "False" Anything nonzero as "True" Always return 0 or 1 Early termination int i=1; int a=4, b=4, c=5; if ( a == b && i > c ) { do_something(); } int i=1; int a=4, b=4, c=5; if ( i > c && a == b ) { do_something(); } 26

Logic Operations in C Examples (char data type)!0x41 --> 0x00!0x00 --> 0x01!!0x41 --> 0x01 0x69 && 0x55 --> 0x01 0x69 0x55 --> 0x01 if (p && *p) (avoids null pointer access) 27

Shift Operations Left shift: x << y Argument x 01100010 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 << 3 Log. >> 2 Arith. >> 2 Argument x << 3 Log. >> 2 Arith. >> 2 - Replicate MSB on right - Useful with two's complement integer representation 00010000 00011000 00011000 10100010 00010000 00101000 11101000 Undefined if y < 0 or y word size 28

Shift Operations Right shift example void main() { char i = -2; } printf("%d", i); i = i >> 2; printf("%d", i); "Arithmetic shift right" is the default operation in C void main() { char i = -2; } printf("%d", i); i = i >> -2; printf("%d", i); 29

Addition (1) Integer addition example 4-bit integers u, v Compute true sum True sum requires one more bit ("carry") Values increase linearly with u and v Forms planar surface 30

Addition (2) Unsigned addition Overflow Ignores carry output Wraps around - If true sum 2 W True Sum 2 w+1 Overflow 2 w 0 Unsigned addition 31

Addition (3) Signed addition Drop off MSB Treat remaining bits as 2's comp. integer Negative overflow True Sum +2 w Positive overflow +2 w -1 +2 w -1 0 0-2 w -1-2 w Negative overflow -2 w -1 Signed addition Positive overflow 32

Addition (4) Signed addition in C Ignores carry output The low-order w bits are identical to unsigned addition Mode x y x + y Truncated x + y Unsigned Two's comp. Unsigned Two's comp. Unsigned Two's comp. 4 [100] -4 [100] 4 [100] -4 [100] 3 [011] 3 [011] 3 [011] 3 [011] 7 [111] -1 [111] 3 [011] 3 [011] 7 [0111] -1 [1111] 11 [1011] -5 [1011] 6 [0110] 6 [0110] Examples for w = 3 7 [111] -1 [111] 3 [011] 3 [011] 6 [110] -2 [110] 33

Multiplication (1) Ranges of (x * y) Unsigned: up to 2w bits 0 x * y (2 w - 1) 2 = 2 2w - 2 w+1 + 1 Two's complement min: up to 2w-1 bits x * y (-2 w-1 )*(2 w-1-1) = -2 2w-2 + 2 w-1 Two's complement max: up to 2w bits (only for TMin 2 ) x * y (-2 w-1 ) 2 = 2 2w-2 Maintaining exact results Would need to keep expanding word size with each product computed Done in software by "arbitrary precision" arithmetic packages 34

Multiplication (2) Unsigned multiplication in C Ignores high order w bits Implements modular arithmetic UMult ( u, v) u v mod 2 w w Operands: w bits True Product: 2*w bits u v * u v Discard w bits: w bits UMult w (u, v) 35

Multiplication (3) Signed multiplication in C Ignores high order w bits The low-order w bits are identical to unsigned multiplication Mode x y x y Truncated x y Unsigned Two's comp. Unsigned Two's comp. Unsigned Two's comp. 5 [101] -3 [101] 4 [100] -4 [100] 3 [011] 3 [011] 3 [011] 3 [011] 7 [111] -1 [111] 3 [011] 3 [011] 15 [001111] -9 [110111] 28 [011100] 4 [000100] 9 [001001] 9 [001001] Examples for w = 3 7 [111] -1 [111] 4 [100] -4 [100] 1 [001] 1 [001] 36

Multiplication (4) Power-of-2 multiply with shift u << k gives u * 2 k - e.g., u << 3 == u * 8 Both signed and unsigned Most machines shift and add faster than multiply - Compiler generates this code automatically Operands: w bits True Product: w+k bits Discard k bits: w bits u 2 k * u 2 k UMult w (u, 2 k ) TMult w (u, 2 k ) k 0 0 1 0 0 0 0 0 0 0 0 0 37

Multiplication (5) Compiled multiplication code C compiler automatically generates shift/add code when multiplying by constant C Function int mul12 (int x) { return x * 12; } Compiled Arithmetic Operations leal (%eax, %eax, 2), %eax ; t x + x * 2 sall $2, %eax ; return t << 2 38

Division (1) Unsigned power-of-2 divide with shift u >> k gives u / 2 k Uses logical shift Operands: / k u 2 k 0 0 1 0 0 0 Binary Point Division: u / 2 k. Result: u / 2 k Expression Division Result 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 39

Division (2) Compiled unsigned division code Uses logical shift for unsigned Logical shift written as >>> in Java C Function unsigned udiv8 (unsigned x) { return x / 8; } Compiled Arithmetic Operations shrl $3, %eax ; return t >> 3 40

Division (3) Signed power-of-2 divide with shift x >> k gives x / 2 k Uses arithmetic shift (rounds wrong direction if x < 0) Operands: / x 2 k k 0 0 1 0 0 0 Binary Point Division: x / 2 k. Result: RoundDown(x / 2 k ) Expression Division Result 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 41

Division (4) Correct power-of-2 divide Want x / 2 k (Round Toward 0) when x < 0 Compute as (x + 2 k -1) / 2 k - In C: (x + (1 << k) - 1) >> k - Biases dividend toward 0 42

Division (6) Compiled signed division code Uses arithmetic shift for signed Arithmetic shift written as >> in Java C Function Compiled Arithmetic Operations testl %eax, %eax js L4 L3: sarl $3, %eax ret L4: addl $7, %eax jmp L3 int idiv8 (int x) { return x / 8; } Explanation if (x < 0) x += 7; return x >> 3; 45

Division (7) Division example -17-2 -1 asdf void main() { char i = -17; printf("%d\n", i); i = i / 8; printf("%d\n", i); } i = i >> 3; printf("%d\n", i); 46