zoukankan      html  css  js  c++  java
  • Python中为什么可以通过bin(n & 0xffffffff)来获得负数的补码?

    一开始我以为这不是个大问题,因为本来整型数在内存中就是以补码的形式存在的,输出自然也是按照补码输出的,例如C语言中

    printf("%X
    ",-3);
    //输出
    //FFFFFFFD

    但是我看了下Python的bin()的输出之后震惊了

    a = bin(-3)
    print(a)
    
    a = bin(3)
    print(a)
    
    b = bin(-3 & 0xffffffff)
    print(b)
    
    c = bin(0xfffffffd)
    print(c)
    
    //输出
    //-0b11
    //0b11
    //0b11111111111111111111111111111101
    //0b11111111111111111111111111111101
    

    也就是说

    1. Python中的整型是补码形式存储的
    2. Python中bin一个负数(十进制表示),输出的是它的原码的二进制表示加上个负号,方便查看(方便个鬼啊)
    3. Python中bin一个负数(十六进制表示),输出的是对应的二进制表示。(注意此时)

    所以你为了获得负数(十进制表示)的补码,需要手动将其和十六进制数0xfffffffd进行按位与操作,得到结果也是个十六进制数,再交给bin()进行输出,得到的才是你想要的补码表示。

  • 相关阅读:
    SQL语句的优化(转载)
    使用经纬度得到位置Geocorder
    android自带下拉刷新SwipeRefreshLayout
    线程池ScheduledThreadPool
    线程池SingleThreadPool
    线程池CachedThreadPool
    线程池FixedThreadPool
    线程池ThreadPoolExecutor
    Bitmap缩放(三)
    Bitmap缩放(二)
  • 原文地址:https://www.cnblogs.com/shengguorui/p/10907382.html
Copyright © 2011-2022 走看看