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

  • 相关阅读:
    Python疑难杂症:SyntaxError: NonASCII character Python中文处理问题
    程序员健康大全透视身体24小时工作时间表
    ConnectionTimeout,CommandTimeout和executionTimeout的理解
    google map api 与jquery结合使用(3) 图标样式,使用xml和异步请求【转帖】
    新手8周跑步训练计划
    57商城温州地区最大本土网上超市
    7 款仿照 Sinatra 思路的 .NET 框架
    线程池的原理和连接池的原理
    免费网站模版:一个黑色系的公司网站模版(flash幻灯)
    深入浅出REST
  • 原文地址:https://www.cnblogs.com/gt1987/p/13477153.html
Copyright © 2011-2022 走看看