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

Similar documents
Integers Sep 3, 2002

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

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

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

CS429: Computer Organization and Architecture

Systems Programming and Computer Architecture ( )

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

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

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

Bits, Bytes, and Integers

Bits, Bytes, and Integers August 26, 2009

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

Computer Systems CEN591(502) Fall 2011

Representing and Manipulating Integers. Jo, Heeseung

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

Bits, Bytes, and Integers Part 2

CS 270: Computer Organization. Integer Arithmetic Operations

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

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

Computer Organization: A Programmer's Perspective

Lecture 5-6: Bits, Bytes, and Integers

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

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

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

Foundations of Computer Systems

Integer Encoding and Manipulation

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

Bits, Bytes and Integers Part 1

Manipulating Integers

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

Representing and Manipulating Integers Part I

Arithmetic and Bitwise Operations on Binary Data

Representing Integers

Bits, Bytes, and Integers

ICS Instructor: Aleksandar Kuzmanovic TA: Ionut Trestian Recitation 2

Arithmetic and Bitwise Operations on Binary Data

Bits, Bytes, and Integers

Bits, Bytes and Integers

BITS, BYTES, AND INTEGERS

Integers II. CSE 351 Autumn Instructor: Justin Hsia

Integers II. CSE 351 Autumn Instructor: Justin Hsia

Integers II. CSE 351 Autumn 2018

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

Integer Representation

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

C Puzzles The course that gives CMU its Zip! Integer Arithmetic Operations Jan. 25, Unsigned Addition. Visualizing Integer Addition

Simple Data Types in C. Alan L. Cox

Bitwise Data Manipulation. Bitwise operations More on integers

CS367 Test 1 Review Guide

Integer Representation Floating point Representation Other data types

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

Programming in C++ 5. Integral data types

Today: Bits, Bytes, and Integers. Bits, Bytes, and Integers. For example, can count in binary. Everything is bits. Encoding Byte Values

REMEMBER TO REGISTER FOR THE EXAM.

Bits, Bytes, and Integer

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

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

CS 107 Lecture 3: Integer Representations

System Programming CISC 360. Floating Point September 16, 2008

Arithmetic Operators. Portability: Printing Numbers

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

Floating point. Today. IEEE Floating Point Standard Rounding Floating Point Operations Mathematical properties Next time.

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

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

Lecture 8: Addition, Multiplication & Division

Computer System and programming in C

Module 2: Computer Arithmetic

Computer Organization & Systems Exam I Example Questions

Chapter 4. Operations on Data

Floating Point Puzzles The course that gives CMU its Zip! Floating Point Jan 22, IEEE Floating Point. Fractional Binary Numbers.

Giving credit where credit is due

Bits, Bytes, and Integers. Data Representa+on: Base- 2 number representa+on. Binary Representa+ons. Encoding Byte Values. Example Data Representa+ons

Giving credit where credit is due

Systems Programming and Computer Architecture ( )

CYSE 411/AIT681 Secure Software Engineering Topic #10. Secure Coding: Integer Security

Few reminders and demos

2/9/18. Readings. CYSE 411/AIT681 Secure Software Engineering. Introductory Example. Secure Coding. Vulnerability. Introductory Example.

2/9/18. CYSE 411/AIT681 Secure Software Engineering. Readings. Secure Coding. This lecture: String management Pointer Subterfuge

CS107, Lecture 2 Bits and Bytes; Integer Representations

Arithmetic Processing

CS 261 Fall Mike Lam, Professor Integer Encodings

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

Floating Point January 24, 2008

Foundations of Computer Systems

COMP2611: Computer Organization. Data Representation

Kinds Of Data CHAPTER 3 DATA REPRESENTATION. Numbers Are Different! Positional Number Systems. Text. Numbers. Other

CHW 261: Logic Design

Floating Point. CSE 238/2038/2138: Systems Programming. Instructor: Fatma CORUT ERGİN. Slides adapted from Bryant & O Hallaron s slides

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

SIGNED AND UNSIGNED SYSTEMS

Computer Organization: A Programmer's Perspective

COMP2121: Microprocessors and Interfacing. Number Systems

Inf2C - Computer Systems Lecture 2 Data Representation

Module 2 - Part 2 DATA TYPES AND EXPRESSIONS 1/15/19 CSE 1321 MODULE 2 1

Chapter 10 - Computer Arithmetic

CS107, Lecture 3 Bits and Bytes; Bitwise Operators

Chapter 03: Computer Arithmetic. Lesson 09: Arithmetic using floating point numbers

Floating Point : Introduction to Computer Systems 4 th Lecture, May 25, Instructor: Brian Railing. Carnegie Mellon

CS429: Computer Organization and Architecture

Chapter 2 Data Representations

Transcription:

Integers Today! Numeric Encodings! Programming Implications! Basic operations! Programming Implications Next time! Floats Fabián E. Bustamante, 2007

Integers in C! C supports several integral data types Note the unsigned modifier Also note the asymmetric ranges C data type (32b) Size Minimum Maximum char 1-128 127 unsigned char 1 0 255 short int 2-32,768 32,767 unsigned short int 2 0 65,535 int 4-2,147,438,648 2,147,438,647 unsigned int 4 0 4,294,967,295 long int 4-2,147,438,648 2,147,438,647 unsigned long int 4 0 4,294,967,295 long long int 8-9,223,372,036,854,775,808 9,223,372,036,854,775,807 unsigned long long int 8 0 18,446,744,073,709,551,615 2

Encoding integers (Binary To Unsigned) Unsigned! w 1 i=0 B2U(X) = x i 2 i e.g. B2U ([1011]) = 1 * 2 3 + 0*2 2 + 1*2 1 + 1*2 0 = 11 C short 2 bytes long short int x = 15213; Decimal Hex Binary x 15213 3B 6D 00111011 01101101 3

Some examples 2 3 = 8 2 2 = 4 2 1 = 2 2 0 = 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 [0101] 5 [1011] 11 4

Encoding integers Two s Complement! B2T(X) = x w 1 2 w 1 + x i 2 i e.g. B2T ([1011]) = -1 * 2 3 + 0*2 2 + 1*2 1 + 1*2 0 = -5 C short 2 bytes long! Sign bit Sign Bit! w 2 i=0 short int y = -15213; Decimal Hex Binary x 15213 3B 6D 00111011 01101101 y -15213 C4 93 11000100 10010011 For 2 s complement, most significant bit indicates sign 0 for nonnegative; 1 for negative 5

Some examples 2 2 = 4 2 1 = 2 2 0 = 1-8 -7-6 -5-4 -3-2 -1-2 3 = -8 0 1 2 3 4 5 6 7 8 [0101] 5 [1011] -5 6

Numeric ranges! Unsigned Values Umin = 0 000 0 UMax = 2 w -1 111 1! Two s Complement Values Tmin = 2 w 1 100 0 TMax = 2 w 1 1 011 1! Other Values Minus 1 111 1 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 7

Values for other word sizes 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! Observations TMin = TMax + 1 Asymmetric range UMax = 2 * TMax + 1! C Programming #include <limits.h> Declares constants, e.g., ULONG_MAX, UINT_MAX LONG_MAX, INT_MAX LONG_MIN, INT_MIN Values platform-specific; for Java this is specified 8

Casting signed to unsigned! C allows conversions from signed to unsigned short int x = 15213; unsigned short int ux = (unsigned short) x; short int y = -15213; unsigned short int uy = (unsigned short) y;! Resulting value Not based on a numeric perspective No change in bit representation Non-negative values unchanged ux = 15213 Negative values change into (large) positive values uy = 50323 9

Unsigned & signed numeric values X! B2U(X)! B2T(X)! 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!! Equivalence Same encodings for nonnegative values! Uniqueness (bijections) Every bit pattern represents unique integer value Each representable integer has unique bit encoding! Hence, well defined inverses U2B(x) = B2U -1 (x) Bit pattern for unsigned integer T2B(x) = B2T -1 (x) Bit pattern for two s comp integer 10

Relation between signed & unsigned Casting from signed to unsigned Two s Complement! x T2B! T2U! X B2U! Unsigned! ux Consider B2U and B2T equations w 1 Maintain same bit pattern! B2U(X) = x i 2 i B2T(X) = x w 1 2 w 1 + x i 2 i i=0 and a bit pattern X; compute B2U(X) B2T(X) weighted sum of for bits from 0 to w 2 cancel each other w 2 i=0 B 2 B w 1 w 1 2U ( X ) B2T ( X ) = x w 1(2 2 ) = xw 1 w 2U ( X ) = xw 12 + B2T ( X ) If we let B 2T ( X ) = x B 2 U ( T 2 B ( x )) = T 2 U ( x ) = x 2 1 w w + x w ux = x x 0 x + 2 w x < 0 Sign bit 11

Relation between signed & unsigned Weight 15213-15213 50323 T 2 U ( x ) = x 2 1 w w + x 1 1 1 1 1 1 1 2 0 0 1 2 1 2 4 1 4 0 0 0 0 8 1 8 0 0 0 0 16 0 0 1 16 1 16 32 1 32 0 0 0 0 64 1 64 0 0 0 0 128 0 0 1 128 1 128 256 1 256 0 0 0 0 512 1 512 0 0 0 0 1024 0 0 1 1024 1 1024 2048 1 2048 0 0 0 0 4096 1 4096 0 0 0 0 8192 1 8192 0 0 0 0 16384 0 0 1 16384 1 16384 -/+32768 0 0 1-32768 1 32768 Sum 15213-15213 50323 ux = x + 2 16 = -15213 + 65536 12

Conversion - graphically! 2 s Comp. Unsigned Ordering inversion Negative Big positive 1111 UMax! UMax 1! TMax! 0111 TMax + 1! TMax! Unsigned! Range! 2 s Comp.! Range! 0! 1! 2! 0000 0! TMin! 1000 13

Signed vs. unsigned in C! Constants By default are considered to be signed integers Unsigned if have U/u as suffix 0U, 4294967259U! Casting Explicit casting bet/ 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 & procedure calls tx = ux; uy = ty; 14

Casting surprises! Expression evaluation If mix unsigned and signed in single expression, signed values implicitly cast to unsigned Including comparison operations <, >, ==, <=, >= Examples for W = 32! Expression Type Eval unsigned 1 signed 1 unsigned 0 signed 1 0 == 0U -1 < 0-1 < 0U 2147483647 > -2147483647-1 2147483647U > -2147483647-1 2147483647 > (int) 2147483648U -1 > -2 (unsigned) -1 > -2 unsigned 0 signed 1 signed 1 unsigned 1 2 32-1 -1 = 2147483647 15

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 = x w 1,, x w 1, x w 1, x w 2,, x 0 k copies of MSB! X w! X ʹ k! w! 16

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! 17

Justification for sign extension! Prove correctness by induction on k Induction Step: extending by single bit maintains value w 2 B2T(X) = x w 1 2 w 1 + x i 2 i i=0 X w! - X ʹ - + Key observation: 2 w - 2 w-1 = 2 w-1 Look at weight of upper bits: w+1! X 2 w 1 x w 1 X 2 w x w 1 + 2 w 1 x w 1 = 2 w 1 x w 1 18

Why should I use unsigned?! Don t use just because number nonzero C compilers on some machines generate less efficient code Easy to make mistakes (e.g., casting) Few languages other than C supports unsigned integers! Do use when need extra bit s worth of range Working right up to limit of word size 19

Negating with complement & increment! Claim: Following holds for 2 s complement ~x + 1 == -x! Complement Observation: ~x + x == 1111 11 2 == -1 x + ~x 1 0 0 1 1 1 0 1 0 1 1 0 0 0 1 0! Increment -1 1 1 1 1 1 1 1 1 ~x + x + (-x + 1) == -1 + (-x + 1) ~x + 1 == -x 20

Comp. & incr. examples x = 15213! 0! 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 Decimal Hex Binary 0 0 00 00 00000000 00000000 ~0-1 FF FF 11111111 11111111 ~0+1 0 00 00 00000000 00000000 21

Unsigned addition! Standard addition function Ignores carry output! Implements modular arithmetic s = UAdd w (u, v) = u + v mod 2 w Operands: w bits! True Sum: w+1 bits! u + v u + v Discard Carry: w bits! UAdd w (u, v) UAdd w ( u, v) = w u + v, u + v < 2 w w u + w 2,2 x + y < 2 w+1 22

Visualizing 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 Add 4 (u, v)! u! v! 23

Visualizing unsigned addition! Wraps around If true sum 2 w At most once UAdd 4 (u, v)! Overflow! True Sum! 2 w+1! Overflow! 2 w! 0! Modular Sum! u! v! 24

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 Operands: w bits! True Sum: w+1 bits! + u + v u v Discard Carry: w bits! TAdd w (u, v) 25

Characterizing TAdd! Functionality True sum requires w+1 bits Drop off MSB Treat remaining bits as 2 s comp. integer 0 111 1! 0 100 0! 0 000 0! True Sum! 2 w 1! 2 w 1! 0! PosOver! TAdd Result! 011 1! 000 0! 1 100 0! 2 w 1! 100 0! 1 000 0! 2 w! NegOver! TAdd w (u,v) = u + v + 2 w 1 u + v u + v 2 w 1 u + v < TMin w (NegOver)! TMin w u + v TMax w TMax w < u + v (PosOver)! 26

Visualizing 2 s comp. addition! Values 4-bit two s comp. Range from -8 to +7! Wraps Around TAdd 4 (u, v)! If sum 2 w 1 NegOver! Becomes negative At most once 8 If sum < 2 w 1 6 4 Becomes positive 2 At most once 0-2 4 6-4 -6-8 -8! -6! -4! u! -2! 0! 2! 4! 6! -8-6 -4-2 2 0 v! PosOver! 27

Detecting 2 s comp. overflow! Task Given s = TAddw(u, v) Determine if s = Addw(u, v) Example int s, u, v; s = u + v;! Claim Overflow iff either: u, v < 0, s 0 (NegOver) 2 w 1! 2 w 1! u, v 0, s < 0 (PosOver) ovf = (u<0 == v<0) && (u<0!= s<0); 0! 2 w 1! 2 w! PosOver! NegOver! 28

Multiplication! Computing exact product of w-bit numbers x, y Either signed or unsigned! Ranges Unsigned: 0 x * y (2 w 1) 2 = 2 2w 2 w+1 + 1 Up to 2w bits to represent 2 s complement min: x * y ( 2 w 1 )*(2 w 1 1) = 2 2w 2 + 2 w 1 Up to 2 w 1 bits 2 s complement max: x * y ( 2 w 1 ) 2 = 2 2w 2 Up to 2w bits! Maintaining exact results Would need to keep expanding word size with each product computed Done in software by arbitrary precision arithmetic packages 29

Unsigned multiplication in C Operands: w bits! u True Product: 2*w bits! * v u v Discard w bits: w bits! UMult w (u, v)! Standard multiplication function Ignores high order w bits! Implements modular arithmetic UMult w (u, v) = u v mod 2 w 30

Security vulnerability in XDR /* * Illustration of code vulnerability similar to * that found in Sun s XDR library */ 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 ele_src */ void *result = malloc(ele_cnt * ele_size); if (result == NULL) return NULL; /* malloc failed */ void *next = result; int i; for (i = 0; i < ele_cnt; i++) { memcpy(next, ele_src[i], ele_size); /* Copy object i to dest */ next += else_size; /* Move pointer to next */ } return result; Call it with ele_cnt = 2 20 +1 and ele_size = 2 12 Then this overflows, allocating only 4096B and this for loop will write over the allocated buffer, corrupting other data structures! US-CERT Vulnerability note http://www.kb.cert.org/vuls/id/192995 31

Two s complement multiplication! Two s complement multiplication int x, y; int p = x * y; Compute exact product of two w-bit numbers x, y Truncate result to w-bit number p = TMultw(x, y)! Relation Signed multiplication gives same bit-level result as unsigned up == (unsigned) p 32

Power-of-2 multiply with shift! Operation u << k gives u * 2 k Both signed and unsigned Operands: w bits! * u 2 k k 0 0 1 0 0 0 True Product: w+k bits! u 2 k 0 0 0 Discard k bits: w bits! UMult w (u, 2 k )! Examples u << 3 == u* 8 TMult w (u, 2 k ) u << 5 u << 3 = u * 24 Most machines >> and + much faster than * (1 to 12 cycles) Compiler generates this code automatically 0 0 0 33

Unsigned power-of-2 divide with shift! Quotient of unsigned by power of 2 u >> k gives u / 2 k Operands:! Uses logical shift / u 2 k k 0 0 1 0 0 0 Binary Point! Division:! u / 2 k 0.! Result:! u / 2 k! 0 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 34

Signed power-of-2 divide with shift! Quotient of signed by power of 2 x >> k gives x / 2 k Uses arithmetic shift Rounds wrong direction when x < 0 k x Operands:! / 2 k 0 0 1 0 0 0 Binary Point! Division:! x / 2 k 0.! Result:! RoundDown(x / 2 k ) 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 35

Correct power-of-2 divide! Quotient of negative number by power of 2 Want x / 2 k (Round Toward 0) x/y = (x+y-1)/y Compute as (x+2 k -1)/ 2 k In C: (x<0? (x + (1<<k)-1) : x) >> k Biases dividend toward 0! Case 1: No rounding Dividend:! Divisor:! / u 2 k k 1 0 0 0 +2 k + 1 0 0 0 1 1 1 1 1 1 1 0 0 1 0 0 0 Binary Point! u / 2 k 01 1 1 1.! 1 1 1 Biasing has no effect! 36

Correct power-of-2 divide (Cont.) Case 2: Rounding! Dividend:! x k 1 +2 k + 1 0 0 0 1 1 1 1 Incremented by 1! Binary Point! Divisor:! / 2 k 0 0 1 0 0 0 x / 2 k 01 1 1 1.! Biasing adds 1 to final result! Incremented by 1! 37

Visualizing 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 Add 4 (u, v)! Integer Addition 32 28 24 20 16 12 8 4 0 0 u! 2 4 6 8 10 12 14 0 2 4 6 8 10 v! 12 14 38

Visualizing unsigned addition! Wraps around If true sum 2 w At most once UAdd 4 (u, v)! Overflow! True Sum! 2 w+1! Overflow! 16 14 12 10 2 w! 0! Modular Sum! 8 6 4 2 0 0 u! 2 4 6 8 10 12 14 0 2 4 6 8 10 12 14 v! 39

Encoding example 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 40

C Puzzles! Taken from old exams! Assume machine with 32 bit word size, two s complement integers! For each of the following C expressions, either: Argue that is true for all argument values Give example where not true Initialization! int x = foo(); int y = bar(); unsigned ux = x; unsigned uy = y; x < 0 ((x*2) < 0) ux >= 0 x & 7 == 7 (x<<30) < 0 ux > -1 x > y -x < -y x * x >= 0 x > 0 && y > 0 x + y > 0 x >= 0 -x <= 0 x <= 0 -x >= 0! 41

C Puzzle answers! Assume machine with 32 bit word size, two s comp. integers! TMin makes a good counterexample in many cases q x < 0 ((x*2) < 0) False:!TMin q ux >= 0 True:!0 = UMin q x & 7 == 7 (x<<30) < 0 True:!x 1 = 1 q ux > -1 False:!0 q x > y -x < -y False:!-1, TMin q x * x >= 0 False:!30426 q x > 0 && y > 0 x + y > 0 False:!TMax, TMax q x >= 0 -x <= 0 True:!! TMax < 0! q x <= 0 -x >= 0!False:!!!TMin! 42