二进制若干问题证明

注:此资料来源于参考答案。本人用LaTex打出。推荐使用第二种写法,大大减少LaTex的书写量。

1.证明二进制负数的补码等于反码加一

证明:
设二进制数x为n位,则有
x=2nx x 补 = 2 n − x
x=(d0d2d3...dn1)2 x = ( d 0 d 2 d 3 . . . d n − 1 ) 2
将x表示为十进制
x=d020+d121++dn12n1 x = d 0 ⋅ 2 0 + d 1 ⋅ 2 1 + ⋯ + d n − 1 ⋅ 2 n − 1
其中 di{0,1} d i ∈ { 0 , 1 }
x=(1d0)20+(1d1)21++(1dn1)2n1 x 反 = ( 1 − d 0 ) ⋅ 2 0 + ( 1 − d 1 ) ⋅ 2 1 + ⋯ + ( 1 − d n − 1 ) ⋅ 2 n − 1
x+1=(1d0)20+(1d1)21++(1dn1)2n1+1=1+20+21++2n1(d020++dn12n1)=2nx=x x 反 + 1 = ( 1 − d 0 ) ⋅ 2 0 + ( 1 − d 1 ) ⋅ 2 1 + ⋯ + ( 1 − d n − 1 ) ⋅ 2 n − 1 + 1 = 1 + 2 0 + 2 1 + ⋯ + 2 n − 1 − ( d 0 ⋅ 2 0 + ⋯ + d n − 1 ⋅ 2 n − 1 ) = 2 n − x = x 补
证毕。

另一种写法:
证明:
设二进制数x为n位,则有
x=2nx x 补 = 2 n − x
x=(d0d2d3...dn1)2 x = ( d 0 d 2 d 3 . . . d n − 1 ) 2
将x表示为十进制
x=n1i=0di2i x = ∑ i = 0 n − 1 d i ⋅ 2 i
其中 di{0,1} d i ∈ { 0 , 1 }
x=n1i=0(1di)2i x 反 = ∑ i = 0 n − 1 ( 1 − d i ) ⋅ 2 i
x+1=n1i=0(1di)2i+1=n1i=02i+1n1i=0di2i=2nx=x x 反 + 1 = ∑ i = 0 n − 1 ( 1 − d i ) ⋅ 2 i + 1 = ∑ i = 0 n − 1 2 i + 1 − ∑ i = 0 n − 1 d i ⋅ 2 i = 2 n − x = x 补
证毕。

2.证明二进制从低位扩展到高位可以用最高位填充

x1=(x0x1xn1)2=x2=(x0x0x0x1xn1)2 x 1 = ( x 0 x 1 … x n − 1 ) 2 = x 2 = ( x 0 x 0 … x 0 x 1 … x n − 1 ) 2
证明:
(1)当x为正数时,显然成立
(2)当x为负数时 x0=1 x 0 = 1 ,有
x1=2nxn=2n(x02n1++xn120) x 1 = 2 n − x 补 n = 2 n − ( x 0 ⋅ 2 n − 1 + ⋯ + x n − 1 ⋅ 2 0 )
x2=2mxm=2m(x02m1+x02m2++x02n+x02n1+x12n2++xn120)=2m(2m2n)(x02n1++xn120)=2n(x02n1++xn120) x 2 = 2 m − x 补 m = 2 m − ( x 0 ⋅ 2 m − 1 + x 0 ⋅ 2 m − 2 + ⋯ + x 0 ⋅ 2 n + x 0 ⋅ 2 n − 1 + x 1 ⋅ 2 n − 2 + ⋯ + x n − 1 ⋅ 2 0 ) = 2 m − ( 2 m − 2 n ) − ( x 0 ⋅ 2 n − 1 + ⋯ + x n − 1 ⋅ 2 0 ) = 2 n − ( x 0 ⋅ 2 n − 1 + ⋯ + x n − 1 ⋅ 2 0 )
x1=x2 ∴ x 1 = x 2
证毕。

另一种写法:
证明:
(1)当x为正数时,显然成立
(2)当x为负数时 x0=1 x 0 = 1 ,有
x1=2nxn=2nn1i=0xi2n1i x 1 = 2 n − x 补 n = 2 n − ∑ i = 0 n − 1 x i ⋅ 2 n − 1 − i
x2=2mxm=2m(m1i=n2i+n1i=0xi2n1i)=2m(2m2n)(n1i=0xi2n1i)=2n(n1i=0xi2n1i) x 2 = 2 m − x 补 m = 2 m − ( ∑ i = n m − 1 2 i + ∑ i = 0 n − 1 x i ⋅ 2 n − 1 − i ) = 2 m − ( 2 m − 2 n ) − ( ∑ i = 0 n − 1 x i ⋅ 2 n − 1 − i ) = 2 n − ( ∑ i = 0 n − 1 x i ⋅ 2 n − 1 − i )
x1=x2 ∴ x 1 = x 2
证毕。

3.证明二进制可以从最低位每三位转化为八进制

证明:
x=(dn1d0)2 x = ( d n − 1 ⋯ d 0 ) 2
将x表示为十进制:
x=n1i=0di2i x = ∑ i = 0 n − 1 d i 2 i
将x高位补零对齐到3的倍数:
x=3ki=0di2i,k=n/3 x = ∑ i = 0 3 k d i 2 i , k = ⌈ n / 3 ⌉
x=ki=0(d3i23i+d3i+123i+1+d3i+223i+2)=ki=023i(d3i+d3i+1+d3i+2)=ki=0wi8i x = ∑ i = 0 k ( d 3 i 2 3 i + d 3 i + 1 2 3 i + 1 + d 3 i + 2 2 3 i + 2 ) = ∑ i = 0 k 2 3 i ( d 3 i + d 3 i + 1 + d 3 i + 2 ) = ∑ i = 0 k w i 8 i
证毕。

源码

# 1.证明二进制负数的补码等于反码加一
证明:
设二进制数x为n位,则有
$x_补=2^n-x$
$x=(d_0d_2d_3...d_{n-1})_2$
将x表示为十进制
$x=d_0\cdot2^0+d_1\cdot2^1+\cdots+d_{n-1}\cdot2^{n-1}$
其中$d_i\in\{0,1\}$
$x_反=(1-d_0)\cdot2^0+(1-d_1)\cdot2^1+\cdots+(1-d_{n-1})\cdot2^{n-1}$
$x_反+1=(1-d_0)\cdot2^0+(1-d_1)\cdot2^1+\cdots+(1-d_{n-1})\cdot2^{n-1}+1\\=1+2^0+2^1+\cdots+2^{n-1}-(d_0\cdot2^0+\cdots+d_{n-1}\cdot2^{n-1})\\=2^n-x\\=x_补$
证毕。

另一种写法:
证明:
设二进制数x为n位,则有
$x_补=2^n-x$
$x=(d_0d_2d_3...d_{n-1})_2$
将x表示为十进制
$x=\sum_{i=0}^{n-1} d_i\cdot2^i$
其中$d_i\in\{0,1\}$
$x_反=\sum_{i=0}^{n-1} (1-d_i)\cdot2^i$
$x_反+1=\sum_{i=0}^{n-1} (1-d_i)\cdot2^i+1\\=\sum_{i=0}^{n-1}2^i+1-\sum_{i=0}^{n-1} d_i\cdot2^i\\=2^n-x\\=x_补$
证毕。

# 2.证明二进制从低位扩展到高位可以用最高位填充
即$x_1=(x_0x_1\ldots x_{n-1})_2=x_2=(x_0x_0\ldots x_0x_1\ldots x_{n-1})_2$
证明:
(1)当x为正数时,显然成立
(2)当x为负数时$x_0=1$,有
$x_1=2^n-{x_补}_n\\=2^n-(x_0\cdot2^{n-1}+\cdots+x_{n-1}\cdot2^0)$
$x_2=2^m-{x_补}_m\\=2^m-(x_0\cdot2^{m-1}+x_0\cdot2^{m-2}+\cdots+x_0\cdot2^n+x_0\cdot2^{n-1}+x_1\cdot2^{n-2}+\cdots+x_{n-1}\cdot2^0)\\=2^m-(2^m-2^n)-(x_0\cdot2^{n-1}+\cdots+x_{n-1}\cdot2^0)\\=2^n-(x_0\cdot2^{n-1}+\cdots+x_{n-1}\cdot2^0)$
$\therefore x_1=x_2$
证毕。

另一种写法:
证明:
(1)当x为正数时,显然成立
(2)当x为负数时$x_0=1$,有
$x_1=2^n-{x_补}_n\\=2^n-\sum_{i=0}^{n-1} x_i\cdot2^{n-1-i}$
$x_2=2^m-{x_补}_m\\=2^m-(\sum_{i=n}^{m-1} 2^i+\sum_{i=0}^{n-1} x_i\cdot2^{n-1-i})\\=2^m-(2^m-2^n)-(\sum_{i=0}^{n-1} x_i\cdot2^{n-1-i})\\=2^n-(\sum_{i=0}^{n-1} x_i\cdot2^{n-1-i})$
$\therefore x_1=x_2$
证毕。

# 3.证明二进制可以从最低位每三位转化为八进制
证明:
$x=(d_{n-1}\cdots d_0)_2$
将x表示为十进制:
$x=\sum_{i=0}^{n-1} d_i2^i$
将x高位补零对齐到3的倍数:
$x=\sum_{i=0}^{3k} d_i2^i,k=\lceil n/3\rceil$
$x=\sum_{i=0}^k (d_{3i}2^{3i}+d_{3i+1}2^{3i+1}+d_{3i+2}2^{3i+2})\\=\sum_{i=0}^k 2^{3i}(d_{3i}+d_{3i+1}+d_{3i+2})\\=\sum_{i=0}^k w_i8^i$
证毕。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值