zoukankan      html  css  js  c++  java
  • 位运算

    1.按位与&

    #规则(1&1=1,1&0=0,0&0=0,0&1=0)(两个1结果是1)
    >>> 4&5
    4
    '''
    正整数的补码与原码相同
    4的补码:00000100
    5的补码:00000101
    结果    00000100
    100B = 4D
    '''
    >>> -2 & 3
    2
    '''
    10000010
    -2的补码:11111110 
    3的补码: 00000011 
    		00000010
    10B = 2D
    '''
    >>> -4 & -5
    '''
    10000100 -4原码
    11111100 -4的补码  -5的原码10000101 
    11111011 -5的补码
    11111000  得到补码
    11110111  减一 
    10001000  取反得到原码  -8
    '''
    

    2.按位并|

    #规则( 1|1=1 ,1 |0=1, 0|0=0)(至少有一个1,结果是1)
    >>> -2 | -3
    -1
    '''
    -2原码:10000010  -3原码:100000011
    -2补码:11111110  
    -3补码:11111101
    按位或  11111111
    减一:	 11111110
    取反:	 10000001 -1
    '''
    
    
    

    3.按位或 ^

    #规则(对位相加,不能进位,即:0^0=0,0^1=1,1^0=0,1^1=0)(仅有一个1,结果才是1)
    >>> -3 ^ 5
    -1
    '''
    -3原码:10000011
    
    -3补码:11111101
    
    按位或:11111111
    
    原码:  10000001
    '''
    

    4.按位翻转 ~(单目运算符)

    #规则对其补码进行取反(包括最高位的符号位)
    >>> ~ -5
    4
    '''
    10000101
    
    -5的补码:11111011
    取反:    00000100
    100B = 4D
    '''
    
  • 相关阅读:
    linux ioctl
    pkg-config用法和gcc cflags
    boost noncopyable类
    google protobuf使用2
    跨平台编译CMake使用
    Linux epoll
    docker安装
    python 脚本转成exe可执行程序
    shell相关知识
    tcpdump使用
  • 原文地址:https://www.cnblogs.com/notfind/p/11346890.html
Copyright © 2011-2022 走看看