ビット拡張とビット遮断(4)


一般的なシーン
1.            ,        .   byte -> int      .
2.            ,        .   int -> byte      .

        .          .

1.ゼロ拡張(符号なし)
幅wのビットベクトルu
ビットベクトルu 2⃗vec{u 2}u 2=[0,...,0,u w−1,u w−2,.,u 0 u_{w−1},u_{w−2},...,u_{0}uw−1,uw−2,...,ここでw’>w,
w拡張をw′左高位補0の拡張とする、ゼロ拡張と呼ぶ.
そして、B 2 U(u⃗)B 2 U(vec u)B 2 U(u)=B 2 U(u 2⃗)B 2 U(vec{u 2})B 2 U(u 2).
2.符号拡張(補符号)
幅wのビットベクトルu
ビットベクトルu 2⃗vec{u 2}u 2=[u w−1,..,u w−1,u w−1,u w−2,..,u 0 u_{w−1},…,u_{w−1},u_{w−1},u_{w−1},…,u_{w−2},…,u_{0}uw−1,…,uw−1,uw−1,…,uw−1,…,uw−2,…,u 0],
ここでw’>wである、wはw’左高位補の最高有効ビットの値に拡張され、この拡張をシンボル拡張と呼ぶ.
同様に、B 2 U(u⃗)B 2 U(vec u)B 2 U(u)=B 2 U(u 2⃗)B 2 U(vec{u 2})B 2 U(u 2).
3.符号なしで切断
x⃗vec xをビットベクトル[x w−1,x w−2,..,x 0 x_{w−1},x_{w−2},...,x_{0}xw−1,xw−2,...,x 2⃗vec{x 2}x 2をkビットに切断した結果:
x 2 ⃗\vec {x2} x2 = [ x k − 1 , x k − 2 , . . . , x 0 x_{k-1}, x_{k-2}, ... , x_{0} xk−1​,xk−2​,...,x0​] . x=B 2 Uw(x⃗)B 2 U_w(\vec x ) B2Uw​(x ) , x2 = B 2 U k ( x 2 ⃗ ) B2U_k(\vec {x2} ) B2Uk​(x2 ) ,
x 2=x mod 2 k 2^k 2 k=B 2 Uw(x⃗)B 2 U_w(\vec x ) B2Uw​(x ) ( mod 2 k 2^k 2k )
4.符号補完カットオフ
x⃗vec xをビットベクトル[x w−1,x w−2,..,x 0 x_{w−1},x_{w−2},...,x_{0}xw−1,xw−2,...,x 2⃗vec{x 2}x 2をkビットに切断した結果:
x 2 ⃗\vec {x2} x2 = [ x k − 1 , x k − 2 , . . . , x 0 x_{k-1}, x_{k-2}, ... , x_{0} xk−1​,xk−2​,...,x0​] . x=B 2 Uw(x⃗)B 2 U_w(\vec x ) B2Uw​(x ) , x2 = B 2 T k ( x 2 ⃗ ) B2T_k(\vec {x2} ) B2Tk​(x2 ) ,
x 2=U 2 Tk U 2 T_k U2Tk​ ( x mod 2 k 2^k 2k ) = U 2 T k U2T_k U2Tk​ ( B 2 U w ( x ⃗ ) B2U_w(\vec x ) B2Uw​(x ) mod 2 k 2^k 2k )