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

    1 ~ 按位取反,指的是按照补码进行取反

    正数取反

    ~8

    转为原码:0000 1000

    转为补码:0000 1000

    补码取反:1111 0111

    负数转为原码:1000 1001 -- 符号位, 负数原码 = (补码- 1) 再取反

    ~8 = -9

    负数取反

    ~ -2

    转为原码:1000 0010

    转为补码:1111 1110

    补码取反:0000 0001

    转为原码:0000 0001   -- 正数原码等于反码

    ~ -2 = 1

    2 & 按位与,针对二进制,只要有一个为0,结果为0

    8 ----> 1000

    7 ----> 0111

    8 & 7 ----> 0000 ,结果为0

    3 | 按位或,针对二进制,只要有一个为1,结果就为1

    8 ----> 1000

    7 ----> 0111

    8 | 7 ----> 1111 ,结果为15

    4 ^ 按位异或,针对二进制,相同的为0,不同的为1

    8 ----> 1000

    7 ----> 0111

    8 | 7 ----> 1111 ,结果为15

    5 << 向左移位,转换成二进制后向左移动2位,后面用0补齐

    8 << 2 相等于乘以2的二次方,结果为32

    6 >> 向右移位,转换成二进制后向右移动2位

    8 >> 2 相等于除以2的二次方,结果为2

    1000 -> 0010

    负数右移,高位补一

    -2 >> 1 = -1

    1010 ->

    1101(反码) ->

    1110(补码) ->

    1110 >>1 = 1111(补码右移1位)

    1111反码为1110

    1110 的原码为 1001

    1001 表示-1

    7 >>> 无符号右移,忽略符号位,空位都以0补齐

    10 进制转2进制的时候,因为2进制数一般分8位、 16位、32位以及64位 表示一个10进制数,所以在转换过程中,最高位会补零。

    在计算机中负数采用2进制的补码表示,10进制转为2进制得到的是原码,将原码按位取反得到的是反码,反码加1得到补码。

    2进制的最高位是符号位,0表示正,1表示负。

    >>>>> 唯一的不同是它无论原来的最左边是什么数,统统都用0填充。
    比如,byte是8位的,-1表示为byte型是11111111(补码表示法)
    b>>>4就是无符号右移4位,即00001111,这样结果就是15。

  • 相关阅读:
    hdu 4115 石头剪子布(2-sat问题)
    AFNetWorking POST Multi-Part Request 上传图片
    左右c++与java中国的垃圾问题的分析与解决
    ACM核武器
    MAX2323E
    cocos2d-x 发动机分析:程序如何开始和结束?
    STL 源代码分析 算法 stl_heap.h
    Android 4.4(KitKat)表格管理子系统
    Swift
    Swift
  • 原文地址:https://www.cnblogs.com/Latiny/p/11304830.html
Copyright © 2011-2022 走看看