1. 当小类型向大类型转换时, 就发生了位扩展. 如 byte -> int 的隐式转换.
2. 当大类型向小类型转换时, 就发生了位截断. 如 int -> byte 的显示转换.
扩展时一般值不变. 截断时值可能会改变.
宽度为 w 的位向量 u ⃗ \vec u u = [ u w − 1 , u w − 2 , . . . , u 0 u_{w-1}, u_{w-2}, ... , u_{0} uw−1,uw−2,...,u0] 和 宽度为w’ 的
位向量 u 2 ⃗ \vec {u2} u2 = [ 0 , … , 0 , u w − 1 , u w − 2 , . . . , u 0 u_{w-1}, u_{w-2}, ... , u_{0} uw−1,uw−2,...,u0] , 其中 w’ > w ,
则 w 扩展 为 w’ 左高位补 0 的扩展, 称为零扩展.
且 B 2 U ( u ⃗ ) B2U(\vec u) B2U(u) = B 2 U ( u 2 ⃗ ) B2U(\vec {u2}) B2U(u2) .
宽度为 w 的位向量 u ⃗ \vec u u = [ u w − 1 , u w − 2 , . . . , u 0 u_{w-1}, u_{w-2}, ... , u_{0} uw−1,uw−2,...,u0] 和 宽度为w’ 的
位向量 u 2 ⃗ \vec {u2} u2 = [ 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-2}, ... , u_{0} uw−1,...,uw−1,uw−1,uw−2,...,u0] ,
其中 w’ > w , 则 w 扩展 为 w’ 左高位补最高有效位的值, 这种扩展称为符号扩展.
同样, B 2 U ( u ⃗ ) B2U(\vec u) B2U(u) = B 2 U ( u 2 ⃗ ) B2U(\vec {u2}) B2U(u2) .
令 x ⃗ \vec x x 等于位向量 [ x w − 1 , x w − 2 , . . . , x 0 x_{w-1}, x_{w-2}, ... , x_{0} xw−1,xw−2,...,x0] , 而 x 2 ⃗ \vec {x2} x2 是将其截断为 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 U w ( x ⃗ ) B2U_w(\vec x ) B2Uw(x) , x2 = B 2 U k ( x 2 ⃗ ) B2U_k(\vec {x2} ) B2Uk(x2) ,
则 x2 = x mod 2 k 2^k 2k = B 2 U w ( x ⃗ ) B2U_w(\vec x ) B2Uw(x) ( mod 2 k 2^k 2k )
令 x ⃗ \vec x x 等于位向量 [ x w − 1 , x w − 2 , . . . , x 0 x_{w-1}, x_{w-2}, ... , x_{0} xw−1,xw−2,...,x0] , 而 x 2 ⃗ \vec {x2} x2 是将其截断为 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 U w ( x ⃗ ) B2U_w(\vec x ) B2Uw(x) , x2 = B 2 T k ( x 2 ⃗ ) B2T_k(\vec {x2} ) B2Tk(x2) ,
则 x2 = U 2 T k U2T_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 )