文章目录
- 线索栏
- 笔记栏
-
- 1. 截断的基本概念与示例
- 2. 截断无符号数的原理与公式
-
- 1)原理
- 2)数学直觉
- 3)公式(等式2.9)
- 4)推导过程
- 3. 截断补码数的原理与公式
-
- 1)原理
- 2)公式(等式2.10)
- 3)推导过程
- 4.练习题2.24
- 总结栏
线索栏
笔记栏
1. 截断的基本概念与示例
(1)定义:当用位数更少(k位)的数据类型来表示一个位数较多(w位, k < w)的数值时,会发生截断。具体操作是直接丢弃原始数据的高 w-k位。 (2)本质:这是一种不改变位宽,而强行压缩表示范围的溢出。 (3)代码示例:
int x = 53191; // 32位补码值
short sx = (short)x; // 截断为16位,位模式为0xCFC7
// sx现在被解释为 -12345(补码)
int y = sx; // 通过符号扩展恢复为32位,y = -12345
2. 截断无符号数的原理与公式
1)原理
截断后的值 x′等于原始值 x对 2k取模。
2)数学直觉
所有被丢弃的高位权重都是 2k的倍数(即形如 2i,i≥k),因此在模 2k运算下,它们的贡献均为0。
3)公式(等式2.9)
B
2
U
k
(
[
x
k
−
1
,
⋯
,
x
0
]
)
=
B
2
U
w
(
[
x
w
−
1
,
⋯
,
x
0
]
)
m
o
d
2
k
B2U_k([x_{k-1}, \\cdots, x_0]) = B2U_w([x_{w-1}, \\cdots, x_0]) \\bmod 2^k
B2Uk([xk−1,⋯,x0])=B2Uw([xw−1,⋯,x0])mod2k
4)推导过程
B
2
U
w
(
x
⃗
)
m
o
d
2
k
B2U_w(\\vec{x})\\bmod 2^k
B2Uw(x
)mod2k
=
[
∑
i
=
0
w
−
1
x
i
⋅
2
i
]
m
o
d
2
k
=\\left[\\sum_{i=0}^{w-1} x_i\\cdot 2^i\\right]\\bmod 2^k
=[i=0∑w−1xi⋅2i]mod2k
=
[
∑
i
=
0
k
−
1
x
i
⋅
2
i
]
m
o
d
2
k
(
因为当
i
≥
k
时,
2
i
m
o
d
2
k
=
0
)
=\\left[\\sum_{i=0}^{k-1} x_i\\cdot 2^i\\right]\\bmod 2^k\\quad(\\text{因为当 }i\\geq k\\text{时, }2^i\\bmod 2^k=0)
=[i=0∑k−1xi⋅2i]mod2k(因为当 i≥k时, 2imod2k=0)
=
∑
i
=
0
k
−
1
x
i
⋅
2
i
=\\sum_{i=0}^{k-1} x_i\\cdot 2^i
=i=0∑k−1xi⋅2i
=
B
2
U
k
(
[
x
k
−
1
,
⋯
,
x
0
]
)
=B2U_k([x_{k-1},\\cdots,x_0])
=B2Uk([xk−1,⋯,x0])
3. 截断补码数的原理与公式
1)原理
补码数的截断是两个步骤的组合: (1)与无符号数一样截断:计算原始值(无论被解释为有符号还是无符号)对2k取模,得到一个范围在 [0,2k−1]内的中间无符号数。这个数的位模式是保留的低 k位。 (2)重新解释为补码:将得到的这个 k位无符号数,通过函数
U
2
T
k
U2T_k
U2Tk重新解释为k位补码数(即判断其最高位
x
k
−
1
x_{k−1}
xk−1 ,若为1,则值 = 中间值 – 2k)。
2)公式(等式2.10)
B
2
T
k
(
[
x
k
−
1
,
⋯
,
x
0
]
)
=
U
2
T
k
(
B
2
U
w
(
[
x
w
−
1
,
⋯
,
x
0
]
)
m
o
d
2
k
)
B2T_k([x_{k-1}, \\cdots, x_0]) = U2T_k \\big( B2U_w([x_{w-1}, \\cdots, x_0]) \\bmod 2^k \\big)
B2Tk([xk−1,⋯,x0])=U2Tk(B2Uw([xw−1,⋯,x0])mod2k)
3)推导过程
首先通过推导证明
B
2
U
w
(
x
⃗
)
m
o
d
2
k
=
B
2
U
k
(
[
x
k
−
1
,
⋯
,
x
0
]
)
B2U_w (\\vec{x})mod2^k=B2U_k ([x_{k−1} ,⋯,x_0 ])
B2Uw(x
)mod2k=B2Uk([xk−1,⋯,x0])。然后,由于我们需要一个补码解释的结果,只需要将这个无符号结果
U
2
T
k
U2T_k
U2Tk 即可:
x
′
=
U
2
T
k
(
x
m
o
d
2
k
)
x′=U2T_k (xmod2^k)
x′=U2Tk(xmod2k)。
4.练习题2.24


总结栏
本节核心是理解整数截断的原理与数学本质。
2
k
2^k
2k取模(
m
o
d
mod
mod)。数学上等价于只保留低k位。 公式:
x
′
=
x
m
o
d
2
k
x′=xmod2^k
x′=xmod2k
U
2
T
k
U2T_k
U2Tk函数)为补码数。这可能导致有符号解释下的值发生“符号改变”(如一个负数截断后可能变成正数,如补码-5(0xB)截断后变为3)。 公式:
x
′
=
U
2
T
k
(
x
m
o
d
2
k
)
x′=U2T_k (xmod2^k)
x′=U2Tk(xmod2k)
网硕互联帮助中心



评论前必须登录!
注册