python二进制转为十进制,python怎么把十进制转化为二进制

  python二进制转为十进制,python怎么把十进制转化为二进制

  1正十进制下的原则1.1:5 ^ 7=12

  5: 0101

  7: 0111

  二进制数的和分为三步:

  值是相加的,而不是进位值;二进制OR运算计算进位值,二进制AND运算,然后左移一位;对于第1步和第2步的结果,重复上述两步,两个数之和表示不计算进位值加上进位值,直到没有进位。

  为什么要把第二部分移到左边?

  jjdxtg计算十进制的5 ^ 7时,进位向前一位进1,也就是相当于左移

  5的详细计算:

  第一次:

  或者:0101 0111=0010,不带进位的值。

  并且:01010111=0101,等于1的比特表示该比特要被进位。以及进位是要向前进一位,所以要左移

  001,两个位置为1,表示有两个位置需要进位,左移运算,01011=1

  第二次:

  0010^1010=1000

  (00101010)1=0100 #且进位,需要继续添加。

  第三次:

  1000^0100=1100

  (10000100) 1=0000 #无进位

  进位0返回第一步的结果。

  1.2很多负面博客上的教程都是以正数为例进行讲解,让很多读者误以为是对源代码进行了二元运算。

  实际情况用补码算!

  因为正源代码,负代码,补码是相等的,大家误以为是用的源代码。

  最高位1表示负数,最高位0表示正数在python3中

  (个人认为使用补码运算是因为符号位可以直接参与运算)

  源码转化成补码:源码转化成反码(符号位1不变,其他位改变),然后反码+1

  补码转化为源码:你只需要记住,补码的补码就是源码

  所以补码归补码,然后1

  例如-2 8

  用8位二进制表示:

  -2源代码:1000 0010;逆码:1111 1101;补充:1111 1110

  8源代码/补码/补码:0000 1000

  补码运算的结果如下:

  1.1111 1110 0000 1000=1111 0110(负数)转换成源代码:1000 1010=-10。

  2.(1111100000 1000) 1=0001 0000(正数),源码和补码相同:0001 0000=16。

  这是一个使用补码运算的例子。

  继续操作:

  进位到16,继续计算1或2步,你会发现你进入了一个无限循环。

  因为:python3实现不会溢出,溢出的最高位不会被丢弃。详情请看博文:https://www.jianshu.com/p/21fd1598d4ae。

  这个方法在c,c,java里都没有问题。但是python3会有问题,存储的正数是无穷大。

  2 python代码python位操作

  或者不~或者左右移动。

  # -*-编码:utf-8 -*-class解:def Add(self,num1,num2): #在此处写代码如果不是num 1:return num 2 elif not num 2:return num 1 while num 2:num 1,num2=(num1^num2)0xFFFFFFFF,(num 1 num 2)1 if num 131==0:return num 1 else:return num 1-4294967296 why-4294967296?因为2**32=-4294967296。

  下面详细解释:

  回到前面:

  让我们计算二进制中两个数的相加,它是二进制的补数。

  如果直接输出是指补码直接转换成十进制(中间不转换成逆码1)。

  但是我们最后要输出的是源码的十进制,所以中间少了一步转化成源码的步骤。

  前面的计算:1111110 0000 1000=1111 0110(负数)转换成源代码:1000 1010=-10。

  111 0110直接转换成十进制是246,想要的结果是-10。

  你会发现246-256=-10,这是我们的结果。

  为什么要减去256?跟我们的数字8有关系,2**8=256。

  在程序中,我们用的是32位,所以减去2**32.

  而正数不会有这个问题,因为源码,补码,补码都是相等的。

  查了半天资料,终于解决了问题,去吃饭了!

  边缘

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: