04 Shifting and Sign Extension

background image

University  of  Washington  

Sec.on  2:  Integer  &  Floa.ng  Point  Numbers  

¢

Representa.on  of  integers:  unsigned  and  signed  

¢

Unsigned  and  signed  integers  in  C  

¢

Arithme.c  and  shiBing  

¢

Sign  extension  

¢

Background:  frac.onal  binary  numbers  

¢

IEEE  floa.ng-­‐point  standard  

¢

Floa.ng-­‐point  opera.ons  and  rounding  

¢

Floa.ng-­‐point  in  C  

 

ShiBing  and  Sign  Extension  

background image

University  of  Washington  

ShiB  Opera.ons  for  unsigned  integers  

¢

LeB  shiB:  

 x  <<  y  

§

Shi/  bit-­‐vector  x  le/  by  y  posi6ons  

§ 

Throw  away  extra  bits  on  le/  

§ 

Fill  with  0s  on  right  

¢

Right  shiB:    x  >>  y  

§

Shi/  bit-­‐vector  x  right  by  y  posi6ons  

§ 

Throw  away  extra  bits  on  right  

§ 

Fill  with  0s  on  le/  

ShiBing  and  Sign  Extension  

00000110  

x  

00010000  

<<  3  

00011000  

>>  2  

11110010  

x  

00010000  

<<  3  

00101000  

>>  2  

00110

000  

00110

000  

00

000001  

00

000001  

10010

000  

00

111100  

10010

000  

00

111100  

6  

48  

1  

242  

144  should  be  1936  

60  should  be  60.5          

background image

University  of  Washington  

ShiB  Opera.ons  for  signed  integers  

¢

LeB  shiB:  

 x  <<  y  

§

Equivalent  to  mul6plying  by  2

y

   

§

(if  resul6ng  value  fits,  no  1s  are  lost)  

¢

Right  shiB:    x  >>  y  

§

Logical  shi/  (for  unsigned  values)  

§ 

Fill  with  0s  on  le/  

§

Arithme6c  shi/  (for  signed  values)  

§ 

Replicate  most  significant  bit  on  le/  

§ 

Maintains  sign  of  x  

§

Equivalent  to  dividing  by  2

y  

§ 

Correct  rounding  (towards  0)  requires    

some  care  with  signed  numbers  

ShiBing  and  Sign  Extension  

01100010  

x  

00010000  

<<  3  

00011000  

Logical  >>  2  

00011000  

Arithme6c  >>  2  

10100010  

x  

00010000  

<<  3  

00101000  

Logical  >>  2  

11101000  

Arithme6c  >>  2  

00010

000  

00010000  

00

011000  

00011000  

00

011000  

00011000  

00010

000  

00

101000  

11

101000  

00010000  

00101000  
11101000  

Undefined behavior when

y < 0 or y ≥ word_size

98  

16  should  be  784  

24  should  be  24.5  

24  should  be  24.5  

-­‐94  

16  should  be  -­‐752  

40  should  be  -­‐23.5  

-­‐24  should  be  -­‐23.5  

background image

University  of  Washington  

Using  ShiBs  and  Masks  

¢

Extract  the  2nd  most  significant  byte  of  an  integer:  

§

First  shi/,  then  mask:  (  x  >>  16  )  &  0xFF  

¢

Extract  the  sign  bit  of  a  signed  integer:  

§

(  x  >>  31  )  &  1      -­‐  need  the  “&  1”  to  clear  out  all  other  bits  except  LSB  

¢

Condi.onals  as  Boolean  expressions  (

assuming  x  is  0  or  1

)  

§

if  (x)  a=y  else  a=z;        which  is  the  same  as            a  =  x  ?  y  :  z;  

§

Can  be  re-­‐wriaen  (assuming  arithme6c  right  shi/)  as:  

           a  =  (  (x  <<  31)  >>  31)  &  y  +  ((!x)  <<  31  )  >>  31  )  &  z;  

ShiBing  and  Sign  Extension  

01100001  01100010  01100011  01100100    

x  

00010000  

x  >>  16  

00011000  

(  x  >>  16)  &  0xFF  

00010

000  

00000000  00000000  01100001  01100010    

00

011000  

00000000  00000000  00000000  11111111  

00000000  00000000  00000000  01100010    

background image

University  of  Washington  

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

 

ShiBing  and  Sign  Extension  

k  copies  of  MSB  

• • •

X

X ʹ′

• • •

• • •

• • •

w  

w  

k  

background image

University  of  Washington  

Sign  Extension  Example  

¢

Conver.ng  from  smaller  to  larger  integer  data  type  

¢

C  automa.cally  performs  sign  extension  

ShiBing  and  Sign  Extension  

short int x = 12345;
int ix = (int) x;
short int y = -12345;
int iy = (int) y;

Decimal

Hex

Binary

x

12345

30 39

00110000 01101101

ix

12345 00 00 30 39

00000000 00000000 00110000 01101101

y

-12345

CF C7

11001111 11000111

iy

-12345 FF FF CF C7

11111111 11111111 11001111 11000111


Wyszukiwarka

Podobne podstrony:
04 Shifting and Sign Extension
04 Shifting and Sign Extension
04 Emotions and well being across cultures
Allyson James Tales Of The Shareem 04 Aiden and Ky
Murray Rothbard 04 Menger and Bohm Bawerk
Alastair J Archibald Grimm Dragonblaster 04 Truth and Deception (v5 0)
Baum, L Frank Oz 04 Dorothy and the Wizard in Oz
04 Data and C
Microsoft Lync Server 2010 Resource Kit Chapter 04 Conferencing and Collaboration
Edgar Rice Burroughs New Tarzan 04 Tarzan and the Abominable Snowmen # Barton Werper
Donna Leon [Inspector Brunetti 04] Death and Judgement(v1 5)(rtf)
Kenyon, Sherrilyn League 04 Fire And Ice rtf
L B Gregg (Men of Smithfield 04) In And Out
Bradley Using ISO 3382 measures, and their extensions, to evaluate acoustical conditions in concert
Cora Zane 04 Moonlight and Shadows
04 Conditionals and Control Flow
A R Moler [Brian & Tristan 04] Windows and Walls
Kenyon, Sherrilyn League 04 Fire And Ice
[Damaged 04] Damaged and the Outlaw Bijou Hunter

więcej podobnych podstron