一个小小的发现

AlwaysSLH 2008-09-03 01:32:34
今天突然有一个小小的想法:貌似对一个二进制数来说,先对其进行求反运算再加一等于先对其减一再求反
即:

令x为一二进制数,有
~x + 1 == ~( x - 1 )

试着证了一下,原来还真是这样的,不知这是不是一个定理?官方名字叫什么呢?
不知自己的证明有没有缺点,特发此贴,希望各位畅所欲言,谢谢!
^_^

偶用数学归纳法证的,证明如下:


假设有一二进制数a,其位数为k

当k = 1时,a只可能是0或1,由:
~0 + 1 = ~( 0 - 1 ) = 0
~1 + 1 = ~( 1 - 1 ) = 1
得:k为1时,原命题成立

假设k = i时,(i > 1),原名题成立,则:
i位二进制数a满足:~a + 1 = ~( a - 1 )

当k = i + 1时,分两种情况:
(1)a的最后一位为0,即a为:XXXX....XXX0 (X为0或1)
假如用一个符号b代替a的前i位,则a表示为:b0
先对b0取反再加一,令c = ~b + 1,则运算后所得为:c0
再对b0减一取反,令d = ~( b - 1 ),则运算后所得为:d0
因为b为i位,故由上得:c = d
此情况得证
(2)同理:
a的最后一位为1,即a为:XXXX....XXX1 (X为0或1)
假如用一个符号b代替a的前i位,则a表示为:b1
先对b1取反再加一,令c = ~b ,则运算后所得为:c1
再对b1减一取反,则运算后所得为:c1
此情况得证

综上所述:原命题成立
...全文
164 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
疯哥哥 2008-09-04
  • 打赏
  • 举报
回复
计算机结构原理里面都有.
计算机里用补码表示负数.
假设一个正整数的原码是x,那么~x + 1 就是x的补码,也就是-x(负数) 的表示方法.
负数取反加一,也就是对补码再取反加1,又得到原码(正数).
总的来说 ~x + 1 = -x
假如一个8位数据x = 0x01,也就是 00000001 b ,
~x + 1 = 0xFF 把它解释成char的话就是-1,unsigned char 就是 255
~(x-1) + 1 = -( x - 1 ) = -x + 1 = (~x + 1) + 1 = ~x + 2
liutaohum 2008-09-04
  • 打赏
  • 举报
回复
这个你只要写成二进制,再比较一下就知道了啊。
phz1985 2008-09-03
  • 打赏
  • 举报
回复
x - (x-1) == 1 <=>
~(x - 1) - ~x == 1 <=>
~x + 1 == ~( x - 1 ).
AlwaysSLH 2008-09-03
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 baihacker 的回复:]
1.
-x = ~x + 1
2.
~x = -x - 1
3.
~(y-1) = -(y-1)- 1 = -y = ~y + 1
[/Quote]

强!!!
上课去了,晚上回来讨论
^_^
xqls_xqls 2008-09-03
  • 打赏
  • 举报
回复
学习了。
baihacker 2008-09-03
  • 打赏
  • 举报
回复
在七楼对你的等式有证明了...
baihacker 2008-09-03
  • 打赏
  • 举报
回复
1.
-x = ~x + 1
2.
~x = -x - 1
3.
~(y-1) = -(y-1)- 1 = -y = ~y + 1
冷月清晖 2008-09-03
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 bubu8633 的回复:]
~n+1

一般这样取绝对值
[/Quote]

不准确,是取相反数
yshuise 2008-09-03
  • 打赏
  • 举报
回复
UP
冷月清晖 2008-09-03
  • 打赏
  • 举报
回复
~n+1

一般这样取绝对值
e_sharp 2008-09-03
  • 打赏
  • 举报
回复
UP
baihacker 2008-09-03
  • 打赏
  • 举报
回复
当k = 1时,a只可能是0或1,由:
~0 + 1 = ~( 0 - 1 ) = 0
~1 + 1 = ~( 1 - 1 ) = 1
得:k为1时,原命题成立

0取反是-1


-x = ~x + 1
wangdeqie 2008-09-03
  • 打赏
  • 举报
回复
UP,学习了!楼主好强啊

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧