带符号的整数的表示和运算
名词解释
- 带符号整数:即 “整数”,-2、-1、0、1、2、3…
short a = 1; //带符号整数(短整型)
int b = 2; //带符号整数(整型)
- 带符号整数可用
原码、补码、反码
表示,同一个含义,相当于用不同的编码方式表示
记忆点
- 原码:
- 符号位
0/1
表示正/负
,剩余的数值位表示真值的绝对值 - 若机器字长为
n+1
位,带符号整数原码表示范围是 − ( 2 n − 1 ) ≤ x ≤ 2 n − 1 -(2^n-1) \leq x \leq 2^n-1 −(2n−1)≤x≤2n−1 - 真值 0 有两种形式:+0 = -0, [ + 0 ] 原 = 0 , 0000000 [+0]_原=0,0000000 [+0]原=0,0000000, [ − 0 ] 原 = 1 , 0000000 [-0]_原=1,0000000 [−0]原=1,0000000
- 缺点:符号位不能够参与运算,需要设计复杂的硬件电路,费钱!
- 符号位
- 补码:
- 可参与符号为的运算
负数
原码和补码互相直接转换- 从右往左找到第一个
1
,这个1
的左边所有数值位
按位取反
- 从右往左找到第一个
- 补码的减法: [ A ] 补 − [ B ] 补 = [ A ] 补 + [ − B ] 补 [A]_补-[B]_补=[A]_补 + [-B]_补 [A]补−[B]补=[A]补+[−B]补
- 负值补码转换规则,如:
[
19
]
补
=
0
,
0010011
,
[
−
19
]
补
=
1
,
1101101
[19]_补=0,0010011,[-19]_补=1,1101101
[19]补=0,0010011,[−19]补=1,1101101
- 全部位按位取反,再
末尾+1
- 也可以从右往左找到第一个
1
,这个1
的左边所有数值位
按位取反
- 全部位按位取反,再
原码表示
即人类能够理解的数值,记作
x
=
−
19
,
[
x
]
原
=
1
,
0010011
x=-19, [x]_原=1,0010011
x=−19,[x]原=1,0010011,若未指明机器字长也可以写成
[
x
]
原
=
1
,
10011
[x]_原=1,10011
[x]原=1,10011
原码、反码、补码转换
原码->补码:正数不需要做任何变换,负数则符号位不变,取反+1