zoukankan      html  css  js  c++  java
  • 二进制相关知识

    十进制=>二进制 正数

    算法:将一个十进制数据除以二,得余数,商继续除以二,得余数,以此类推直到商为零或一为止。最后再倒叙过来即为二进制数。
    例子:42转二进制为 101010 ,高位补零,结果为:00101010

    十进制=>二进制 负数

    算法:负数情况下,先将负号去掉,按照正数方式得到一个二进制数,然后取反,再对结果加一。
    例子:-42,按正数得到二进制数 00101010;取反得 11010101;加一得 11010110 即为结果

    二进制=>十进制 正数

    算法:首先将二进制数补齐位数,首位为0即为正数,否则为负数。然后将二进制中得数的位置按一定方式计算,最后相加即为十进制
    例子:1010,补齐位数 0001010;计算公式:2的3次方1+2的2次方0+2的1次方1+2的0次方0=10

    二进制=>十进制 负数

    算法:如果首位是1的话,那么对应的十进制就是负数,那么首先取反,再换算,
    例子:11101011,取反 00010100;计算公式:2的4次方1+2的3次方0+2的2次方1+2的1次方1+2的0次方*0=20,加负号为-20

    位运算-异或

    标识:^
    算法:对应位相同为0,对应不同为1
    例子:0^0=0 0^1=1 1^0=1 1^1=0;1010 1110 ^ 0000 0000 = 1010 1110
    特性:

    • 交换律 ab=ba
    • 结合律 (ab)c == a(bc)
    • 对于任何数x,都有 xx=0,x0=x
    • 自反性: abb=a^0=a;

    用途:

    • 翻转指定位;比如将数 X=1010 1110 的低4位进行翻转,只需要另找一个数Y,令Y的低4位为1,其余位为0,即Y=0000 1111,然后将X与Y进行异或运算(X^Y=1010 0001)即可得到

    • 交换两个数;

        a=a^b    
        b=a^b     //因为我们上面写了a=a^b,所以这里的b=a^b=(a^b)^b=a^(b^b)=a^0=a
        a=b^a     //因为上面b已经是a了,所以结合第一步就有a=b^a=a^(a^b)=(a^a)^b=0^b=b
      

    至此就实现了a,b的交换

    位运算-与

    标识:&
    算法:两位同时为1,结果才为1,否则结果为0
    例子:3&5 即 0000 0011& 0000 0101 = 0000 0001,因此 3&5 的值得1
    用途:

    • 清零;与一个各位都是零的数相与计算,结果为0
    • 取一个数的指定位;比如取X=1010 1110 的低4位,只需要定义Y=0000 1111,X&Y=0000 1110,得到低4位1110
    • 判断奇偶;判断末位,0即是偶数,1就是奇数。因此可以if ((a & 1) == 0)代替if (a % 2 == 0)来判断a是不是偶数。

    位运算-或

    标识:|
    算法:两位数只要有一个为1,则值为1
    例子:3|5即 0000 0011| 0000 0101 = 0000 0111,因此,3|5的值得7
    用途:常用来对一个数据的某些位设置为1。比如将数 X=1010 1110 的低4位设置为1,只需要另找一个数Y,令Y的低4位为1,其余位为0,即Y=0000 1111,然后将X与Y进行按位或运算(X|Y=1010 1111)即可得到

    位运算-取反

    标识:~
    算法:对一个二进制数按位取反,即将0变1,1变0
    例子:~1=0 ~0=1
    用途:使一个数的最低位为零;使a的最低位为0,可以表示为:a & 1。1的值为 1111 1111 1111 1110,再按"与"运算,最低位一定为0。因为“ ~”运算符的优先级比算术运算符、关系运算符、逻辑运算符和其他运算符都高

    位运算-左移

    标识:<<
    算法:将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)
    例子:设 a=1010 1110,a = a<< 2 将a的二进制位左移2位、右补0,即得a=1011 1000
    用途:若左移时舍弃的高位不包含1,则每左移一位,相当于该数乘以2

    位运算-右移

    标识:>>
    算法:将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃
    例子:a=a>>2 将a的二进制位右移2位,左补0 或者 左补1得看被移数是正还是负
    用途:操作数每右移一位,相当于该数除以2

    参考:
    https://www.cnblogs.com/web-record/p/11132861.html

  • 相关阅读:
    centos 编码问题 编码转换 cd到对应目录 执行 中文解压
    centos 编码问题 编码转换 cd到对应目录 执行 中文解压
    centos 编码问题 编码转换 cd到对应目录 执行 中文解压
    Android MVP 十分钟入门!
    Android MVP 十分钟入门!
    Android MVP 十分钟入门!
    Android MVP 十分钟入门!
    mysql备份及恢复
    mysql备份及恢复
    mysql备份及恢复
  • 原文地址:https://www.cnblogs.com/gt1987/p/13477153.html
Copyright © 2011-2022 走看看