Integers II. CSE 351 Autumn Instructor: Justin Hsia

Similar documents
Integers II. CSE 351 Autumn Instructor: Justin Hsia

Integers II. CSE 351 Autumn 2018

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

Floating Point. CSE 351 Autumn Instructor: Justin Hsia

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

Data III & Integers I

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

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

Integer Encoding and Manipulation

Representing and Manipulating Integers. Jo, Heeseung

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

Bitwise Data Manipulation. Bitwise operations More on integers

Bits, Bytes and Integers

Systems Programming and Computer Architecture ( )

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

Integer Representation

Integers Sep 3, 2002

Bits, Bytes and Integers Part 1

Bits, Bytes, and Integers

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

Lecture 5-6: Bits, Bytes, and Integers

ICS Instructor: Aleksandar Kuzmanovic TA: Ionut Trestian Recitation 2

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

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

Foundations of Computer Systems

Arithmetic and Bitwise Operations on Binary Data

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

CS429: Computer Organization and Architecture

Computer Systems CEN591(502) Fall 2011

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

Memory Allocation II. CSE 351 Autumn Instructor: Justin Hsia

Representing and Manipulating Integers Part I

Arithmetic and Bitwise Operations on Binary Data

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

Representing Integers

Caches II. CSE 351 Autumn Instructor: Justin Hsia

Integer Representation

Data III & Integers I

Bits, Bytes, and Integers

Virtual Memory II. CSE 351 Autumn Instructor: Justin Hsia

Bits, Bytes, and Integers August 26, 2009

x86 Programming III CSE 351 Autumn 2016 Instructor: Justin Hsia

Bits, Bytes, and Integers Part 2

Data III & Integers I

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

CSE 351: The Hardware/Software Interface. Section 2 Integer representations, two s complement, and bitwise operators

Floating Point. CSE 351 Autumn Instructor: Justin Hsia

Arithmetic Operations

Arrays. CSE 351 Autumn Instructor: Justin Hsia

CS61B Lecture #14: Integers

Manipulating Integers

Floating Point. CSE 351 Autumn Instructor: Justin Hsia

BITS, BYTES, AND INTEGERS

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

COMP2611: Computer Organization. Data Representation

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

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

Memory Allocation I. CSE 351 Autumn Instructor: Justin Hsia

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

x86 Programming I CSE 351 Autumn 2016 Instructor: Justin Hsia

CS107, Lecture 3 Bits and Bytes; Bitwise Operators

Unsigned Binary Integers

Unsigned Binary Integers

CS 270: Computer Organization. Integer Arithmetic Operations

Structs and Alignment

Lecture 12 Integers. Computer and Network Security 19th of December Computer Science and Engineering Department

Number Systems CHAPTER Positional Number Systems

CS 107 Lecture 3: Integer Representations

World Inside a Computer is Binary

Cache Example, System Control Flow

CSCI2467: Systems Programming Concepts

CS 31: Introduction to Computer Systems. 03: Binary Arithmetic January 29

L09: Assembly Programming III. Assembly Programming III. CSE 351 Spring Guest Lecturer: Justin Hsia. Instructor: Ruth Anderson

x86 64 Programming II

CS 31: Intro to Systems Binary Arithmetic. Kevin Webb Swarthmore College January 26, 2016

Arithmetic Operators. Portability: Printing Numbers

Chapter 10 Binary Arithmetics

Simple Data Types in C. Alan L. Cox

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

Announcements. Lab Friday, 1-2:30 and 3-4:30 in Boot your laptop and start Forte, if you brought your laptop

Recap from Last Time. CSE 2021: Computer Organization. It s All about Numbers! 5/12/2011. Text Pictures Video clips Audio

Inf2C - Computer Systems Lecture 2 Data Representation

Lecture Topics. Announcements. Today: Integer Arithmetic (P&H ) Next: continued. Consulting hours. Introduction to Sim. Milestone #1 (due 1/26)

CS367 Test 1 Review Guide

Computer Organization & Systems Exam I Example Questions

Assembly Programming III

CSCI 402: Computer Architectures

LAB A Translating Data to Binary

Course Schedule. CS 221 Computer Architecture. Week 3: Plan. I. Hexadecimals and Character Representations. Hexadecimal Representation

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

Memory, Data, & Addressing I

The Design of C: A Rational Reconstruction

The Design of C: A Rational Reconstruction"

Chapter 2. Instruction Set. RISC vs. CISC Instruction set. The University of Adelaide, School of Computer Science 18 September 2017

Chapter Two MIPS Arithmetic

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

Chapter 4. Operations on Data

Computer Organization: A Programmer's Perspective

CS 24: INTRODUCTION TO. Spring 2015 Lecture 2 COMPUTING SYSTEMS

Module 2: Computer Arithmetic

Transcription:

Integers II CSE 351 Autumn 2016 Instructor: Justin Hsia Teaching Assistants: Chris Ma Hunter Zahn John Kaltenbach Kevin Bi Sachin Mehta Suraj Bhat Thomas Neuman Waylon Huang Xi Liu Yufang Sun http://xkcd.com/571/

Administrivia Lab 1 due next Friday (10/14) Partial due on Monday (10/10) Homework 1 will be released on Tuesday (10/11) Timing overlaps a bit with Lab 1 No Panopto for this course Online lecture videos from 2013 at: https://courses.cs.washington.edu/courses/cse351/16au/videos.html 2

Integers Binary representation of integers Unsigned and signed Casting in C Consequences of finite width representations Overflow, sign extension Shifting and arithmetic operations 3

Unsigned vs. Two s Complement 4 bit Example: Unsigned 1011 Two s Complement 1x2 3 + 0x2 2 + 1x2 1 + 1x2 0 1x( 2 3 )+ 0x2 2 + 1x2 1 + 1x2 0 11 (math) difference = 16 = 2 4 5 15 0 1 0 14 1111 0000 1 2 1111 0000 + 1 13 12 11 1110 1101 1100 1011 1010 Unsigned 0001 0010 0011 0100 0101 2 3 4 4 3 5 1101 1100 1011 1010 1110 Two s Complement 0001 0010 0011 0100 0101 + 2 + 3 + 4 10 1001 0110 5 6 1001 0110 + 5 9 1000 0111 6 7 1000 0111 + 6 8 7 8 + 7 4

Unsigned vs. Two s Complement 4 bit Example: Unsigned 1011 Two s Complement 1x2 3 + 0x2 2 + 1x2 1 + 1x2 0 1x( 2 3 )+ 0x2 2 + 1x2 1 + 1x2 0 11 (math) difference = 16 = 2 4 5 15 0 1 0 14 1111 0000 1 2 1111 0000 + 1 13 12 11 1110 1101 1100 1011 1010 Unsigned 0001 0010 0011 0100 0101 2 3 4 4 3 5 1101 1100 1011 1010 1110 Two s Complement 0001 0010 0011 0100 0101 + 2 + 3 + 4 10 1001 0110 5 6 1001 0110 + 5 9 1000 0111 6 7 1000 0111 + 6 8 7 8 + 7 5

Two s Complement Arithmetic The same addition procedure works for both unsigned and two s complement integers Simplifies hardware: only one algorithm for addition Algorithm: simple addition, discard the highest carry bit Called modular addition: result is sum modulo 2 4 bit Examples: 4 +3 0100 +0011-4 +3 1100 +0011 4-3 0100 +1101 =7 =0111 =-1 =1111 =1 10001 =0001 6

Why Does Two s Complement Work? For all representable positive integers, we want: bit representation of bit representation of 0 (ignoring the carry out bit) What are the 8 bit negative encodings for the following? 00000001 +???????? 00000000 00000010 +???????? 00000000 11000011 +???????? 00000000 7

Why Does Two s Complement Work? For all representable positive integers, we want: bit representation of bit representation of 0 (ignoring the carry out bit) What are the 8 bit negative encodings for the following? 00000001 + 11111111 100000000 00000010 + 11111110 100000000 11000011 + 00111101 100000000 These are the bitwise complement plus 1! -x == ~x + 1 8

Signed/Unsigned Conversion Visualized Two s Complement Unsigned Ordering Inversion Negative Big Positive UMax UMax 1 TMax TMax + 1 TMax Unsigned Range 2 s Complement Range 0 1 2 0 TMin 9

Values To Remember Unsigned Values UMin = 0b00 0 = 0 UMax = 0b11 1 = 2 1 Example: Values for Two s Complement Values TMin = 0b10 0 = 2 TMax = 0b01 1 = 2 1 1 = 0b11 1 Decimal Hex Binary UMax 4,294,967,296 FF FF FF FF 11111111 11111111 11111111 11111111 TMax 2,147,483,647 7F FF FF FF 01111111 11111111 11111111 11111111 TMin 2,147,483,648 80 00 00 00 10000000 00000000 00000000 00000000 1 1 FF FF FF FF 11111111 11111111 11111111 11111111 0 0 00 00 00 00 00000000 00000000 00000000 00000000 10

In C: Signed vs. Unsigned Casting Bits are unchanged, just interpreted differently! int tx, ty; unsigned ux, uy; Explicit casting tx = (int) ux; uy = (unsigned) ty; Implicit casting can occur during assignments or function calls tx = ux; uy = ty; gcc flag Wsign conversion produces warnings for implicit casts, but Wall does not 11

Casting Surprises!!! Integer literals (constants) By default, integer constants are considered signed integers Hex constants already have an explicit binary representation Use U (or u ) suffix to explicitly force unsigned Examples: 0U, 4294967259u Expression Evaluation When you mixed unsigned and signed in a single expression, then signed values are implicitly cast to unsigned Including comparison operators <, >, ==, <=, >= 12

Casting Surprises!!! 32 bit examples: TMin = 2,147,483,648, TMax = 2,147,483,647 Left Constant Op Right Constant Interpretation 0 0000 0000 0000 0000 0000 0000 0000 0000 == 0U 1 1111 1111 1111 1111 1111 1111 1111 1111 < 1 1111 1111 1111 1111 1111 1111 1111 1111 > 2147483647 0111 1111 1111 1111 1111 1111 1111 1111 > 2147483647U 0111 1111 1111 1111 1111 1111 1111 1111 < 1 1111 1111 1111 1111 1111 1111 1111 1111 > (unsigned) 1 1111 1111 1111 1111 1111 1111 1111 1111 > 2147483647 0111 1111 1111 1111 1111 1111 1111 1111 < 2147483647 0111 1111 1111 1111 1111 1111 1111 1111 > 0000 0000 0000 0000 0000 0000 0000 0000 0 0000 0000 0000 0000 0000 0000 0000 0000 0U 0000 0000 0000 0000 0000 0000 0000 0000 2147483648 1000 0000 0000 0000 0000 0000 0000 0000 2147483648 1000 0000 0000 0000 0000 0000 0000 0000 2 1111 1111 1111 1111 1111 1111 1111 1110 2 1111 1111 1111 1111 1111 1111 1111 1110 2147483648U 1000 0000 0000 0000 0000 0000 0000 0000 (int) 2147483648U 1000 0000 0000 0000 0000 0000 0000 0000 Unsigned Signed Unsigned Signed Unsigned Signed Unsigned Unsigned Signed 13

Integers Binary representation of integers Unsigned and signed Casting in C Consequences of finite width representations Overflow, sign extension Shifting and arithmetic operations 14

Arithmetic Overflow Bits Unsigned Signed 0000 0 0 0001 1 1 0010 2 2 0011 3 3 0100 4 4 0101 5 5 0110 6 6 0111 7 7 1000 8 8 1001 9 7 1010 10 6 1011 11 5 1100 12 4 1101 13 3 1110 14 2 1111 15 1 When a calculation produces a result that can t be represented in the current encoding scheme Integer range limited by fixed width Can occur in both the positive and negative directions Computer handling of overflow CPU may be capable of throwing an exception for overflow on signed values CPU doesn t throw exception for unsigned C and Java ignore overflow exceptions oops! 15

Overflow: Unsigned Addition: drop carry bit ( ) 15 + 2 17 1 1111 + 0010 10001 Subtraction: borrow ( ) 1-2 -1 15 10001-0010 1111 12 11 13 10 14 1101 1100 1011 1111 1110 1010 1001 9 15 because of modular arithmetic 8 Unsigned 0000 0001 1000 0111 0 0110 7 0010 0011 0100 0101 1 6 2 3 4 5 16

Overflow: Two s Complement Addition: ( ) + ( ) = ( ) result? 6 + 3 9-7 Subtraction: ( ) + ( ) = ( )? -7-3 -10 6 0110 + 0011 1001 1001-0011 0110 4 3 5 6 2 1101 1100 1011 1111 1110 1010 1001 7 1 8 0000 0001 Two s Complement 1000 0111 For signed: overflow if operands have same sign and result s sign is different 0 0110 + 7 0010 0011 0100 0101 + 1 + 6 + 2 + 5 + 3 + 4 17

Sign Extension What happens if you convert a signed integral data type to a larger one? e.g., char short int long 4 bit Positive Case Add 0 s? 8 bit Example: 4 bit: 0010 = +2 8 bit:????0010 00000010 = +2? 18

Sign Extension What happens if you convert a signed integral data type to a larger one? e.g., char short int long 4 bit Positive Case Add 0 s? 8 bit Example: 4 bit: 0010 = +2 8 bit: 00000010 = +2 Negative Case Add 0 s? Make MSB 1? Add 1 s? 4 bit: 1100 = 4 8 bit:????1100 00001100 = +12? 10001100 = 116? 11111100 = 4? 19

Sign Extension Task: Given a bit signed integer, convert it to + bit signed integer with the same value Rule: Add copies of sign bit Let be the th digit of in binary copies of MSB original X 20

Sign Extension Example Convert from smaller to larger integral data types C automatically performs sign extension Java too short int x = 12345; int ix = (int) x; short int y = -12345; int iy = (int) y; Var Decimal Hex Binary x 12345 30 39 00110000 00111001 ix 12345 00 00 30 39 00000000 00000000 00110000 00111001 y -12345 CF C7 11001111 11000111 iy -12345 FF FF CF C7 11111111 11111111 11001111 11000111 21

Integers Binary representation of integers Unsigned and signed Casting in C Consequences of finite width representations Overflow, sign extension Shifting and arithmetic operations 22

Shift Operations Left shift (x<<n) bit vector x by n positions Throw away (drop) extra bits on left Fill with 0s on right Right shift (x>>n) bit vector x by n positions Throw away (drop) extra bits on right Logical shift (for unsigned values) Fill with 0s on left Arithmetic shift (for signed values) Replicate most significant bit on left Maintains sign of x 23

Shift Operations Left shift (x<<n) Fill with 0s on right Right shift (x>>n) Logical shift (for unsigned values) Fill with 0s on left Arithmetic shift (for signed values) Notes: Replicate most significant bit on left Shifts by n<0 or n w (bit width of x) are undefined In C: behavior of >> is determined by compiler In gcc / C lang, depends on data type of x (signed/unsigned) In Java: logical shift is >>> and arithmetic shift is >> x 0010 0010 x<<3 0001 0000 logical: x>>2 0000 1000 arithmetic: x>>2 0000 1000 x 1010 0010 x<<3 0001 0000 logical: x>>2 0010 1000 arithmetic: x>>2 1110 1000 24

Shifting Arithmetic? What are the following computing? x>>n 0b 0100 >> 1 = 0b 0010 0b 0100 >> 2 = 0b 0001 Divide by 2 n x<<n 0b 0001 << 1 = 0b 0010 0b 0001 << 2 = 0b 0100 Multiply by 2 n Shifting is faster than general multiply and divide operations 25

Left Shifting Arithmetic 8 bit Example No difference in left shift operation for unsigned and signed numbers (just manipulates bits) Difference comes during interpretation: x*2 n? x = 25; 00011001 = Signed Unsigned 25 25 L1=x<<2; 0001100100 = 100 100 L2=x<<3; 00011001000 = -56 200 signed overflow L3=x<<4; 000110010000 = -112 144 unsigned overflow 26

Right Shifting Arithmetic 8 bit Examples Reminder: C operator >> does logical shift on unsigned values and arithmetic shift on signed values Logical Shift: x/2 n? xu = 240u; 11110000 = R1u=xu>>3; 00011110000 = R2u=xu>>5; 0000011110000 = 240 30 7 rounding (down) 27

Right Shifting Arithmetic 8 bit Examples Reminder: C operator >> does logical shift on unsigned values and arithmetic shift on signed values Arithmetic Shift: x/2 n? xs = -16; 11110000 = R1s=xu>>3; 11111110000 = R2s=xu>>5; 1111111110000 = -16-2 -1 rounding (down) 28

Peer Instruction Question For the following expressions, find a value of char x, if there exists one, that makes the expression TRUE. Compare with your neighbor(s)! Assume we are using 8 bit arithmetic: x == (unsigned char) x x >= 128U x!= (x>>2)<<2 x == -x Hint: there are two solutions (x < 128U) && (x > 0x3F) 29

Using Shifts and Masks Extract the 2 nd most significant byte of an int: First shift, then mask: (x>>16) & 0xFF x 00000001 00000010 00000011 00000100 x>>16 00000000 00000000 00000001 00000010 0xFF 00000000 00000000 00000000 11111111 (x>>16) & 0xFF 00000000 00000000 00000000 00000010 30

Using Shifts and Masks Extract the sign bit of a signed int: First shift, then mask: (x>>31) & 0x1 Assuming arithmetic shift here, but works in either case Need mask to clear 1s possibly shifted in x 00000001 00000010 00000011 00000100 x>>31 00000000 00000000 00000000 000000000 0x1 00000000 00000000 00000000 00000001 (x>>31) & 0x1 00000000 00000000 00000000 00000000 x 10000001 00000010 00000011 00000100 x>>31 11111111 11111111 11111111 111111111 0x1 00000000 00000000 00000000 00000001 (x>>31) & 0x1 00000000 00000000 00000000 00000001 31

Using Shifts and Masks Conditionals as Boolean expressions For int x, what does (x<<31)>>31 do? x=!!123 00000000 00000000 00000000 00000001 x<<31 10000000 00000000 00000000 00000000 (x<<31)>>31 11111111 11111111 11111111 11111111!x 00000000 00000000 00000000 00000000!x<<31 00000000 00000000 00000000 00000000 (!x<<31)>>31 00000000 00000000 00000000 00000000 Can use in place of conditional: In C: if(x) {a=y;} else {a=z;} equivalent to a=x?y:z; a=(((x<<31)>>31)&y) (((!x<<31)>>31)&z); 32

Summary Sign and unsigned variables in C Bit pattern remains the same, just interpret differently Strange things can happen with our arithmetic when we convert/cast between sign and unsigned numbers Type of variables affects behavior of operators (shifting, comparison) We can only represent so many numbers in bits When we exceed the limits, arithmetic overflow occurs Sign extension tries to preserve value when expanding Shifting is a useful bitwise operator Can be used in multiplication with constant or bit masking Right shifting can be arithmetic (sign) or logical (0) 33