def Add(n1,n2): carry=1 while carry!=0: s = n1^n2 carry = (n1&n2)<<1 n1 = s n2 = carry return n1
按照这个思路用c++和java写都没有问题,但是用Python时输入负数就不行。问题应该出在carry这个地方,我打印了一下一直递增,不会出现0。不知道为什么?
![]() | 1 BuilderQiu C++、Java会溢出 > Python的整型数据的位宽是32位,8个字节。int 最大值是2147483647 (sys.maxint),而long 长度仅受内存大小限制。 > 溢出的int整数操作结果升级为long类 传送门: http://www.cnblogs.com/zhengyun_ustc/archive/2009/10/14/shifting.html |
![]() | 2 arbipher 2015-06-03 21:25:22 +08:00 看标题还以为是自然数的递归定义。。。 |
3 latteczy OP @BuilderQiu 是要将(n1&n2)强制类型转换为long吗?试过之后还是不可以。 |
![]() | 4 oott123 2015-06-03 22:28:38 +08:00 via Android 为啥要用 Python 做这种事情… |
![]() | 7 czheo 2015-06-04 00:59:47 +08:00 (n1&n2)<<1这一步int overflow的时候,python会自动转成long。解决方法如下。 http://stackoverflow.com/questions/7201207/python-bitshift-32-bit-constraint |
![]() | 8 recall704 2015-06-04 09:39:25 +08:00 @BuilderQiu 少年,32bit 不是 4字节么?咋变成8字节了 |
![]() | 9 BuilderQiu 2015-06-04 11:10:41 +08:00 |