免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 11877 | 回复: 2
打印 上一主题 下一主题

问一个python取反的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-03-27 09:37 |只看该作者 |倒序浏览
今天用了下取反运算。。。
  正数10进制     -|x+1|
   负数10进制     |-x|-1
其它进制就不知道了
   就是不知道这个怎么运算的·····
  ~号的取反运算。。
  在各个进制是怎么实现的呢???

论坛徽章:
0
2 [报告]
发表于 2009-03-27 10:07 |只看该作者
python下如果和C下位操作是一样的我可以给你解释一下:
取反实际上是对于二进制进行操作的,因为数值在计算机中是以二进制进行存储的,至于你转换成多少进制那个无所谓,因为不论怎么弄,数值上是不变的,都是通过对二进制数取反后再转换成你所需要的进制(比如十进制),所以才会出现你所说的现象。
至于为什么有那种现象,是因为二进制存储时,对于有符号的整数是以补码方式存储的,最高位如果是1表示负数,否则是正数,比如16位二进制能表示的数值范围是-32768~32767,符号看最高位,正数的补码是其二进制码本身,而负数的是反码+1,比如说-5,5的二进制是0000000000000101,那么-5的就是1111111111111011,这样表示。
那么问题就回来了,你自己可以拿一个数值试试看,其实补码对于正数就是本身,而对于负数就是最右边的1不变,左边0变1,1变0,正数取反后在数值上体现为-|x+1|,负数的是|x|-1。
不知道说清楚了没有

[ 本帖最后由 daybreakcx 于 2009-3-27 10:09 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2009-03-27 13:54 |只看该作者
原帖由 daybreakcx 于 2009-3-27 10:07 发表
python下如果和C下位操作是一样的我可以给你解释一下:
取反实际上是对于二进制进行操作的,因为数值在计算机中是以二进制进行存储的,至于你转换成多少进制那个无所谓,因为不论怎么弄,数值上是不变的,都是 ...

刚花时间研究了 按位反转
或者按位非
总算搞明白了
按位反转是相对于2进制来说的

即使 2进制的每一个位 都取非,然后得到的值就是 反转的值
那个公式 应该是一个规律
比如 8位的2进制数中

0 00000 10 代表10进制的2
他的按位非是 1 11111 01
因为最高位是1 所以他是个负数,因为是补码形式所以要取得原来的正值(也就是负‘几’中的具体的‘几’)
还要在除最高位置1,后剩下的位置在取非+1得到
也就是 1 00000 10 最高位1 代表是符号负的 00000 10 代表3
加起来等于 -3

在举个例子:

比如说 -7:
7的补码是 0 0000 111
-7 的补码形式是 1 1111 001
按位非 是 0 0000110
因为是正数 正数的补码形式就是他本身所以等于 6

这样你应该明白了吧

其实 -(x+1)就是他的规律

-(x+1)==-x-1
本身也符合那什么 交换结合什么率的。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP