深入理解计算机系统——第二章—2.3整数运算

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_40199047/article/details/101832455

2.3 整数运算

2.3.1 无符号数加法

原理:无符号数加法
0 x , y < 2 w x + w u y = { x + y , x + y < 2 w x + y 2 w , 2 w x + y < 2 w + 1 2.11 e . g : 0x 0 B + 0x 0 C = 0x 17 ( ) = 0x 7 对于0\le x,y<2^w:\\[2ex] x+_w^u y ={\begin{cases} x+y, & x+y<2^w & 正常 \\[2ex] x+y-2^w, & 2^w \leq x+y <2^{w+1} & 溢出 \end{cases}}\qquad (2.11)\\[2ex] \red {\tt {e.g:}}对于四位数的加法有 \\[2ex] \text {0x}0B+\text {0x}0C= \text {0x}17(溢出)=\text {0x}7
原理:检测无符号数加法中的溢出
0 x , y < U M a x w ( x + w u y ) < x ( x + w u y ) < y 对于0\le x,y<UMax_w:\\[2ex] (x+_w^uy)<x||(x+_w^uy)<y,则发生了溢出。
原理:无符号数求反
x w u x w u x + w u x = 0 0 x < 2 w w u x = { x , x = 0 2 w x , x > 0 2.12 对于任意x必然存在某个值-_w^ux满足-_w^ux+_w^ux=0。\\[2ex] 对于0\le x<2^w:\\[2ex] -_w^ux ={\begin {cases} x,&x=0 \\[2ex] 2^w-x,&x>0 \end{cases}}\qquad (2.12)
推导:无符号数求反
x = 0       0 + 0 = 0 2 w x       0 < 2 w x < 2 w       ( x + 2 w x )    m o d    2 w = 2 w    m o d    2 w = 0 x=0\impliedby 0+0=0 \\[2ex] 2^w-x \impliedby 0<2^w-x<2^w\impliedby (x+2^w-x)\; mod \; 2^w = 2^w \; mod \; 2^w = 0

2.3.2 补码加法

原理:补码加法
2 w 1 x , y 2 w 1 1 x + w t y = { x + y 2 w , 2 w 1 x + y x + y , 2 w 1 x + y < 2 w 1 x + y + 2 w , x + y < 2 w 1 2.13 对于-2^{w-1} \leq x, y \leq 2^{w-1}-1:\\[2ex] x + _w^ty ={\begin {cases} x + y-2^w, & 2^{w-1} \leq x+y & 正溢出 \\[2ex] x + y, & -2^{w-1} \leq x+y < 2^{w-1} & 正常 \\[2ex] x + y + 2^w, & x+y < -2^{w-1} & 负溢出 \end{cases}} \qquad (2.13)
推导:补码加法
x + w t y = ˙ U 2 T w ( T 2 U w ( x ) + w u T 2 U w ( y ) ) 2.14 2.6 B 2 U w ( T 2 B w ( x ) ) = T 2 U w ( x ) = x + x w 1 2 w 2.6       T 2 U w ( x ) = x w 1 2 w + x T 2 U w ( y ) = y w 1 2 w + y x + w t y = ˙ U 2 T w ( T 2 U w ( x ) + w u T 2 U w ( y ) )       U 2 T w [ ( x w 1 2 w + x + y w 1 2 w + y )    m o d    2 w ]       U 2 T w [ ( x + y )    m o d    2 w ] z = ˙ x + y ,    z = ˙ z    m o d    2 w ,    z = ˙ U 2 T w ( z ) = x + w t y 1 2 w z < 2 w 1 z = z + 2 w       0 z < 2 w 1 + 2 w = 2 w 1 2.7 0 u U M a x w = ˙ i = 0 w 1 2 i = 2 w 1 : U 2 T w ( u ) = { u , u T M a x w u 2 w , u > T M a x w 2.7 T M a x w = ˙ i = 0 w 1 2 i = 2 w 1 1 T M i n w = ˙ 2 w 1 0 z < 2 w : U 2 T w ( z ) = { z , z T M a x w z 2 w , z > T M a x w       z = z = z + 2 w = x + y + 2 w > 0    负溢出(negative overflow) 2 2 w z < 0 z = z + 2 w       2 w 1 + 2 w = 2 w 1 z < 2 w 2.7 0 u U M a x w = ˙ i = 0 w 1 2 i = 2 w 1 : U 2 T w ( u ) = { u , u T M a x w u 2 w , u > T M a x w 2.7 T M a x w = ˙ i = 0 w 1 2 i = 2 w 1 1 T M i n w = ˙ 2 w 1 2 w 1 z < 2 w : U 2 T w ( z ) = { z , z T M a x w z 2 w , z > T M a x w       z = z 2 w = x + y + 2 w 2 w = x + y 3 0 z < 2 w 1 z = z       0 z < 2 w 1       z = z = z = x + y 4 2 w 1 z < 2 w z = z       2 w 1 z < 2 w       z = z 2 w = x + y 2 w < 0 正溢出(positive overflow) e . g . : { x = 8 = [ 1000 ] , y = 5 = [ 1011 ] ,       { x + y = 13 = [ 10011 ] , x + 4 t y = 3 = [ 0011 ] , 1 x + _w^t y \dot = U2T_w(T2U_w(x) + _w^u T2U_w(y)) \qquad (2.14)\\[2ex] 据等式(2.6)\\[2ex] \purple { B2U_w(T2B_w(x))=T2U_w(x)=x+x_{w-1}2^w \qquad (2.6)\\[2ex] } \implies T2U_w (x) = x_{w-1} 2^w + x \\[2ex] T2U_w (y) = y_{w-1} 2^w + y \\[2ex] x + _w^t y \dot = U2T_w(T2U_w(x) + _w^u T2U_w(y)) \\[2ex] \implies U2T_w[(x_{w-1}2^w + x + y_{w-1} 2^w + y) \; mod \; 2^w] \\[2ex] \implies U2T_w[(x + y) \; mod \; 2^w] \\[2ex] 令 z \dot = x + y, \; z' \dot = z \; mod \; 2^w, \; z'' \dot = U2T_w(z') = x + _w^t y。\\[2ex] 情况1:\\[2ex] -2^w \leq z < -2^{w-1} \\[2ex] z'=z+2^w \implies 0 \leq z' < -2^{w-1} + 2^w = 2^{w-1} \\[2ex] 检查等式(2.7)\\[2ex] \purple { 0 \le u \le UMax_w \dot = \sum_{i=0}^{w-1} 2^i = 2^w -1 : \\[2ex] U2T_w( u) = \begin{cases} u, & u\leq TMax_w \\[2ex] u-2^w, & u>TMax_w \end{cases} \qquad (2.7) } \\[2ex] TMax_w \dot = \sum_{i=0}^{w-1} 2^i = 2^{w -1} - 1 \\[2ex] TMin_w \dot = -2^{w-1} \\[2ex] 有 \\[2ex] 0 \le z' < 2^w : \\[2ex] U2T_w( z') = \begin{cases} z', & z' \leq TMax_w \\[2ex] z'-2^w, & z' > TMax_w \end{cases} \qquad \\[2ex] \implies z'' = z' = z + 2^w = x + y + 2^w > 0 \; \text {负溢出(negative overflow)} \\[2ex] 情况2:\\[2ex] -2^w \leq z < 0 \\[2ex] z'=z+2^w \implies -2^{w-1} + 2^w = 2^{w-1} \leq z' < 2^w \\[2ex] 检查等式(2.7)\\[2ex] \purple { 0 \le u \le UMax_w \dot = \sum_{i=0}^{w-1} 2^i = 2^w -1 : \\[2ex] U2T_w( u) = \begin{cases} u, & u\leq TMax_w \\[2ex] u-2^w, & u>TMax_w \end{cases} \qquad (2.7) } \\[2ex] TMax_w \dot = \sum_{i=0}^{w-1} 2^i = 2^{w -1} - 1 \\[2ex] TMin_w \dot = -2^{w-1} \\[2ex] 有 \\[2ex] 2^{w-1} \leq z' < 2^w : \\[2ex] U2T_w( z') = \begin{cases} z', & z' \leq TMax_w \\[2ex] z'-2^w, & z' > TMax_w \end{cases} \qquad \\[2ex] \implies z'' = z' - 2^w = x + y + 2^w - 2^w = x + y \\[2ex] 情况3:\\[2ex] 0 \leq z < 2^{w-1} \\[2ex] z' = z \implies 0 \leq z' < 2^{w-1} \\[2ex] \implies z'' = z' = z = x + y \\[2ex] 情况4:\\[2ex] 2^{w-1} \leq z < 2^{w} \\[2ex] z' = z \implies 2^{w-1} \leq z' < 2^{w} \\[2ex] \implies z'' = z' - 2^w = x + y -2^w < 0 \text {正溢出(positive overflow)} \\[2ex] \red {\tt {e.g.:}} \\[2ex] {\begin {cases} x = -8 = [1000], \\[2ex] y = -5 = [1011], \\[2ex] \end{cases}} \implies {\begin {cases} x + y = -13 = [10011], \\[2ex] x +_4^t y = 3 = [0011], \\[2ex] \end{cases}} \qquad 情况1 \\[2ex]
原理:检测补码加法的溢出
T M i n w x ,    y T M a x w ,    s = ˙ x + w t y { x > 0 ,    y > 0 ,    s 0       x < 0 ,    y < 0 ,    s 0       TMin_w \leq x,\; y \leq TMax_w,\; s \dot = x +_w^t y \Downarrow \\[2ex] {\begin {cases} x > 0,\; y > 0,\; s \leq 0 \implies & 正溢出 \\[2ex] x < 0,\; y < 0,\; s \geq 0 \implies & 负溢出 \\[2ex] \end{cases}} \\[2ex]

2.2.3 补码的非

原理:补码的非
T M i n w x T M a x w w t x = { T M i n w , x = T M i n w x , x > T M i n w 2.15 t i p s : w t x = x + 1 e . g . : x = [ 0101 ]       w t x = x + 1 = [ 1010 ] + 1 = 6 + 1 = 5 x = [ 0111 ]       w t x = x + 1 = [ 1000 ] + 1 = 8 + 1 = 7 x = 0 , k 0 x = [ x w 1 , x w 2 , . . . , x k + 1 , 1 , 0 , . . . , 0 ] w t x = [ x w 1 , x w 2 , . . . , x k + 1 , 1 , 0 , . . . , 0 ] e . g . : x = [ 010 1 ]       w t x = [ 101 1 ] = 5 x = [ 011 1 ]       w t x = [ 100 1 ] = 7 TMin_w \leq x \leq TMax_w \Downarrow \\[2ex] -_w^tx= {\begin {cases} TMin_w, & x=TMin_w \\[2ex] -x, & x>TMin_w \\[2ex] \end{cases}} \qquad (2.15)\\[2ex] \blue {\tt {tips:}} \\[2ex] -_w^t x = ~x + 1 \\[2ex] \red {\tt { e.g.: }} \\[2ex] \vec x = [0101] \implies-_w^t x = ~\vec x + 1 = [1010] + 1 = -6 + 1 = -5 \\[2ex] \vec x = [0111] \implies-_w^t x = ~\vec x + 1 = [1000] + 1 = -8 + 1 = -7 \\[2ex] 特别的,当\vec x \cancel {=} 0,k \geq 0\Downarrow \\[2ex] \vec x = [x_{w-1},x_{w-2},...,x_{k+1},1,0,...,0]\Downarrow \\[2ex] -_w^t\vec x = [~x_{w-1},~x_{w-2},...,~x_{k+1},1,0,...,0]\Downarrow \\[2ex] \red {\tt { e.g.: }} \\[2ex] \vec x = [010 \green 1] \implies-_w^t x = [101 \green 1] = -5 \\[2ex] \vec x = [011 \green 1] \implies-_w^t x = [100 \green 1] = -7 \\[2ex]

2.3.4 无符号乘法

原理:无符号乘法
0 x ,    y U M a x w x w u y = ( x y )    m o d    2 w 2.16 0 \leq x,\;y \leq UMax_w \Downarrow \\[2ex] x*_w^u y = (x\cdot y) \; mod \; 2^w\qquad (2.16)\\[2ex]

2.3.5 补码乘法

原理:补码乘法
T M i n w x ,    y T M a x w x w u y = U 2 T w ( ( x y )    m o d    2 w ) 2.17 TMin_w \leq x,\; y \leq TMax_w \Downarrow \\[2ex] x*_w^u y = U2T_w( (x\cdot y) \; mod \; 2^w ) \qquad (2.17)\\[2ex]
原理:无符号和补码乘法的位级等价性
x = B 2 T w ( x ) ,    y = B 2 T w ( y ) x = B 2 U w ( x ) ,    y = B 2 U w ( y )       T 2 B w ( x w t y ) = U 2 B w ( x w t y ) e . g . : 令x=B2T_w(\vec x),\;y=B2T_w(\vec y) \\[2ex] x'=B2U_w(\vec x),\;y'=B2U_w(\vec y) \\[2ex] \implies T2B_w(x *_w^t y)=U2B_w(x *_w^t y) \\[2ex] \red{{\tt e.g.:}} \\[2ex]
推导:无符号和补码乘法的位级等价性
B 2 U w ( T 2 B w ( x ) ) = T 2 U w ( x ) = x + x w 1 2 w 2.6 x = x + x w 1 2 w ,    y = y + y w 1 2 w       ( x y ) = [ ( x + x w 1 2 w ) ( y + y w 1 2 w ) ]    m o d    2 w = [ x y + ( x w 1 y + y w 1 x ) 2 w + x w 1 y w 1 2 2 w ]    m o d    2 w = ( x y )    m o d    2 w 2.18       T 2 U w ( x w t y ) = T 2 U w ( U 2 T w ( x y )    m o d    2 w ) = ( x y )    m o d    2 w       U 2 B w ( T 2 U w ( x w t y ) ) = T 2 B w ( x w t y ) = U 2 B w ( x w t y ) e . g . : [ 101 ] [ 011 ] = 5 3 = 15 = [ 001111 ]       [ 111 ] = 7 [ 101 ] [ 011 ] = 3 3 = 9 = [ 110111 ]       [ 111 ] = 1 B2U_w(T2B_w(x))=T2U_w(x)=x+x_{w-1}2^w \qquad (2.6)\Downarrow \\[2ex] x' = x + x_{w-1}2^w,\; y' = y + y_{w-1}2^w \\[2ex] \implies (x' \cdot y') = [(x + x_{w-1}2^w) \cdot (y + y_{w-1}2^w)] \; mod \; 2^w \\[2ex] = [x \cdot y + ( x_{w-1}y + y_{w-1}x)2^w + x_{w-1}y_{w-1}2^{2w}] \; mod \; 2^w \\[2ex] = (x \cdot y) \; mod \; 2^w \qquad (2.18) \\[2ex] \implies T2U_w(x *_w^t y)=T2U_w(U2T_w(x \cdot y)\; mod \; 2^w) = (x \cdot y)\; mod \; 2^w \\[2ex] \implies U2B_w(T2U_w(x *_w^t y))=T2B_w(x *_w^t y)=U2B_w(x' *_w^t y') \\[2ex] \red{{\tt e.g.:}} \\[2ex] [101]*[011]=5*3=15=[001111]\implies[111]=7 \\[2ex] [101]*[011]=-3*3=-9=[110111]\implies[111]=-1 \\[2ex]

2.3.6 乘以常数

推导:乘以2的幂
B 2 U w + k ( [ x w 1 , x w 2 , . . . , x 0 , 0 , . . . , 0 ] ) = i = 0 w 1 x i 2 i + k = [ i = 0 w 1 x i 2 i ] 2 k = x 2 k e . g . : x 4 = [ 1011 ] = 11 , x 4 + 2 = x 4 < < 2 = [ 101100 ] = 44 B2U_{w+k}([x_{w-1},x_{w-2},...,x_0,\blue {0},...,\blue {0}]) = \sum_{i=0}^{w-1}x_i2^{i+k} \\[2ex] =[\sum_{i=0}^{w-1}x_i2^{i}] \cdot 2^k \\[2ex] =x2^k \\[2ex] \red {\tt {e.g.:}} \\[2ex] x_4 = [1011] = 11,x_{4+2}=x_4 << 2 = [101100] = 44
原理:与2的幂相乘的无符号乘法
0 k < w       ( x < < k ) = x w u 2 k 0 \leq k < w \implies (x<<k) = x *_w^u 2^k \\[2ex]
原理:与2的幂相乘的补码乘法
0 k < w       ( x < < k ) = x w t 2 k 0 \leq k < w \implies (x<<k) = x *_w^t 2^k \\[2ex]
归纳
x K K       [ . . . ( 0...0 ) ( 1 a . . . 1 b ) ( 0...0 ) ( 1 n . . . 1 m ) . . . ] n m ,    b a t y p e A : ( x < < b ) + ( x < < ( b 1 ) ) + . . . + ( x < < a ) + ( x < < n ) + ( x < < ( n 1 ) ) + . . . + ( x < < m ) t y p e B : ( x < < ( b + 1 ) ) ( x < < a ) + ( x < < ( n + 1 ) ) ( x < < m ) t i p s : a = 2 w 1       x < < ( a + 1 ) = 0 e . g . : K = 5 = [ 1011 ]       0 x ( x < < 2 ) K = 55 = [ 110111 ]       ( x < < 6 ) ( x < < 2 ) x K = 6 = [ 0110 ]       ( x < < 2 ) + ( x < < 1 ) x*K \Downarrow \\[2ex] K \implies [...(0...0)(1_a...1_b)(0...0)(1_n...1_m)...] \\[2ex] n \geq m,\; b\geq a \\[2ex] type A:(x<<b)+(x<<(b-1))+...+(x<<a) +(x<<n)+(x<<(n-1))+...+(x<<m) \\[2ex] type B:(x<<(b+1)) - (x<<a) +(x<<(n+1)) - (x<<m) \\[2ex] \blue {\tt {tips:}} \\[2ex] a=2^{w-1} \implies x<<(a+1)=0 \\[2ex] \red {\tt {e.g.:}} \\[2ex] K = -5 = [1011] \implies 0-x-(x<<2) \\[2ex] K = 55 = [110111] \implies (x<<6)-(x<<2)-x \\[2ex] K = 6 = [0110] \implies (x<<2)+(x<<1) \\[2ex]

2.3.7 除以2的幂

整数除法总是舍入到零。
a R ,    I n t e r g e    a = a       a a < a + 1 I n t e r g e    a = a       a 1 a < a e . g . : 3.14 = 3 ,    3.14 = 4 a \in {R},\; Interge \; a'=\lfloor a \rfloor \implies a' \leq a < a'+1 \\[2ex] Interge \; a'=\lceil a \rceil \implies a' - 1 \leq a < a' \\[2ex] \red {\tt {e.g.:}} \\[2ex] \lfloor 3.14 \rfloor= 3 ,\; \lfloor -3.14 \rfloor= -4 \\[2ex]
原理:除以2的幂的无符号除法
0 k < w x > > k = x / 2 k 0 \leq k < w \Downarrow \\[2ex] x>>k = \lfloor x/2^k \rfloor \\[2ex]
推导:除以2的幂的无符号除法
x = [ x w 1 , x w 2 , . . . , x 0 ] ,    x = x w k = [ x w 1 , x w 2 , . . . , x k ] ,    0 k < w x = x k 1 = [ x k 1 , x k 2 , . . . , x 0 ] x = 2 k x + x ,    0 x < 2 k         x / 2 k = x       [ x w 1 , x w 2 , . . . , x 0 ] > > k = [ 0 , . . . , 0 , x w 1 , x w 2 , . . . , x k ] ,    x = [x_{w-1},x_{w-2},...,x_{0}] ,\; x' = x_{w-k} = [x_{w-1},x_{w-2},...,x_{k}] ,\; 0 \leq k <w \\[2ex] x'' = x_{k-1} = [x_{k-1},x_{k-2},...,x_{0}]\Downarrow \\[2ex] x = 2^k x' + x'' ,\; 0 \leq x'' < 2^k。\; \implies \lfloor x/2^k \rfloor = x' \\[2ex] \implies [x_{w-1},x_{w-2},...,x_{0}] >> k = [\blue {0},...,\blue {0},x_{w-1},x_{w-2},...,x_{k}] ,\; \\[2ex]
原理:除以2的幂的补码除法
0 k < w x > > k = x / 2 k 0 \leq k < w \Downarrow \\[2ex] x>>k = \lfloor x/2^k \rfloor \\[2ex]
推导:除以2的幂的补码除法,向下舍入
x = [ x w 1 , x w 2 , . . . , x 0 ] ,    x = x w k = [ x w 1 , x w 2 , . . . , x k ] ,    0 k < w x = x k 1 = [ x k 1 , x k 2 , . . . , x 0 ] x = 2 k x + x ,    0 x < 2 k         x / 2 k = x       [ x w 1 , x w 2 , . . . , x 0 ] > > k = [ x w 1 , . . . , x w 1 , x w 1 , x w 2 , . . . , x k ] ,    e . g . : [ 1100111111001100 ] > > 4 = [ 1111 110011111100 ] = 771.25 = 772 x = [x_{w-1},x_{w-2},...,x_{0}] ,\; x' = x_{w-k} = [x_{w-1},x_{w-2},...,x_{k}] ,\; 0 \leq k <w \\[2ex] x'' = x_{k-1} = [x_{k-1},x_{k-2},...,x_{0}]\Downarrow \\[2ex] x = 2^k x' + x'' ,\; 0 \leq x'' < 2^k。\; \implies \lfloor x/2^k \rfloor = x' \\[2ex] \implies [x_{w-1},x_{w-2},...,x_{0}] >> k = [\blue {x_{w-1}},...,\blue {x_{w-1}},\blue {x_{w-1}},x_{w-2},...,x_{k}] ,\; \\[2ex] \red {\tt {e.g.:}} \\[2ex] [1100 1111 1100 1100] >> 4 = [\it 1111 \rm 1100 1111 1100] = \lfloor -771.25 \rfloor= -772
原理:除以2的幂的补码除法,向上舍入
0 k < w ( x + ( 1 < < k ) 1 ) > > k = x / 2 k 0 \leq k < w \Downarrow \\[2ex] (x+(1 << k) - 1)>>k = \lfloor x/2^k \rfloor \\[2ex]
推导:除以2的幂的补码除法,向上舍入
x / y = ( x + y 1 ) / y ,    x = q y + r ,    0 r < y ( x + y 1 ) / y = q + ( r + y 1 ) / y       ( x + y 1 ) / y = q + ( r + y 1 ) / y = { q , r = 0 q + 1 , r > 0 C : ( x < 0    ?    x + ( 1 < < k ) 1 : x ) > > k e . g . : ( [ 1100111111001100 ] + ( 1 < < 4 ) 1 ) > > 4 = [ 1100111111011011 ] > > 4 = [ 1111 110011111101 ] = 771.25 = 771 \lceil x/y \rceil = \lfloor (x + y - 1)/y \rfloor ,\; 令x = qy + r,\; 0 \leq r < y \Downarrow \\[2ex] (x + y - 1) / y = q + ( r + y - 1) / y \\[2ex] \implies \lfloor (x + y - 1)/y \rfloor = q + \lfloor (r + y - 1) / y \rfloor = \begin{cases} q,& r = 0 \\[2ex] q + 1 ,& r > 0 \\[2ex] \end{cases} \\[2ex] C表达式:(x<0\; ? \; x+(1<<k)-1:x)>>k \\[2ex] \red {\tt {e.g.:}} \\[2ex] ([1100 1111 1100 1100] + (1<<4)-1) >> 4 = \\[2ex] [1100 1111 1101 1011] >> 4 = [\it 1111 \rm 1100 1111 1101] = \lfloor -771.25 \rfloor= -771

猜你喜欢

转载自blog.csdn.net/weixin_40199047/article/details/101832455
今日推荐