精华内容
下载资源
问答
  • 一、进制转换编程用十进制,十进制转换为二进制、八进制、十六进制In [135]: bin(23)Out[135]: '0b10111'In [136]: oct(23)Out[136]: '0o27'In [137]: hex(23)Out[137]: '0x17'也可以直接反向获取十进制In [146]: 0b...

    一、进制转换

    编程用十进制,十进制转换为二进制、八进制、十六进制

    In [135]: bin(23)

    Out[135]: '0b10111'

    In [136]: oct(23)

    Out[136]: '0o27'

    In [137]: hex(23)

    Out[137]: '0x17'

    也可以直接反向获取十进制

    In [146]: 0b10111

    Out[146]: 23

    In [147]: 0o27

    Out[147]: 23

    In [148]: 0x17

    Out[148]: 23

    也可以用int函数来转换

    In [149]: int('0b10111', 2)

    Out[149]: 23

    In [150]: int('0o27', 8)

    Out[150]: 23

    In [151]: int('0x17', 16)

    Out[151]: 23

    二、位运算

    按位异或的3个特点:

    (1) 0^0=0,0^1=1  0异或任何数=任何数

    (2) 1^0=1,1^1=0  1异或任何数-任何数取反

    (3) 任何数异或自己=把自己置0

    按位异或的几个常见用途:

    (1) 使某些特定的位翻转

    例如对数10100001的第2位和第3位翻转,则可以将该数与00000110进行按位异或运算。

    10100001^00000110 = 10100111

    (2) 实现两个值的交换,而不必使用临时变量

    例如交换两个整数a=10100001,b=00000110的值,可通过下列语句实现:

    a = a^b;   //a=10100111

    b = b^a;   //b=10100001

    a = a^b;   //a=00000110

    & 按位与

    | 按位或

    ^ 按位异或

    ~ 按位取反

    << 按位左移

    >> 按位右移

    用途: 直接操作二进制,省内存,效率高

    1)<

    各二进位全部左移n位,高位丢弃,低位补0

    x << n 左移 x 的所有二进制位向左移动n位,移出位删掉,移进的位补零

    【注意事项】

    a. 左移1位相当于乘以2

    用途:快速计算一个数乘以2的n次方 (8<<3 等同于8*2^3)

    b.左移可能会改变一个数的正负性

    2)>>右移

    各二进位全部右移n位,保持符号位不变

    x >> n, x的所有二进制位向右移动n位,移出的位删掉,移进的位补符号位, 右移不会改变一个数的符号

    【注意事项】

    右移1位相当于除以2

    x 右移 n 位就相当于除以2的n次方

    用途:快速计算一个数除以2的n次方 (8>>3 等同于8/2^3)

    3)& 按位与

    全1才1否则0 :只有对应的两个二进位均为1时,结果位才为1,否则为0

    4) | 按位或

    有1就1 只要对应的二个二进位有一个为1时,结果位就为1,否则为0

    5) ^ 按位异或

    不同为1 当对应的二进位相异(不相同)时,结果为1,否则为0

    6) ~ 取反

    ~9 = -10

    【为什么9取反变成了-10的说明】:

    9的原码 ==> 0000 1001 因为正数的原码=反码=补码,所以在 真正存储的时候就是0000 1001

    接下来进行对9的补码进行取反操作

    进行取反==> 1111 0110 这就是对9 进行了取反之后的补码

    既然已经知道了补码,那么接下来只要转换为 咱们人能识别的码型就可以,因此按照规则 ,把这个1111 0110 这个补码 转换为原码即可

    符号位不变,其它位取反==> 1000 1001

    三、例题

    1. 输入一个正数,输出该数二进制表示中1的个数

    知识点:把一个整数减去1,再和原整数做与运算,会把该整数最右边一个1变成0。那么一个整数的二进制表示中有多少个1,就可以进行多少次这样的操作。

    总结:把一个整数减去1之后再和原来的整数做位与运算,得到的结果相当于是把整数的二进制表示中的最右边一个1变成0 。

    代码如下:

    def count(n):

    num = 0

    while n:

    n &= (n-1)

    num += 1

    return num

    2. 输入两个整数m和n,计算需要改变m的二进制表示中的多少位才能得到n

    解决方法:第一步,求这两个数的与或;第二步,统计异或结果中1的位数。

    代码如下:

    def mton(m,n):

    yihuo = m^n

    count = 0

    while yihuo:

    yihuo &= (yihuo-1)

    count += 1

    print(count)

    3. 用一条语句判断一个整数是不是2的整数次方

    解决方法:一个整数如果是2的整数次方,那么它的二进制表示中有且只有一位是1,而其它所有位都是0 。根据前面的分析,把这个整数减去1后再和它自己做与运算,这个整数中唯一的1就变成0了。

    代码如下:

    def judgebinary(x):

    if x&(x-1) == 0:

    return True

    return False

    4.不使用运算符 + 和 – ​​​​​​​,计算两整数 ​​​​​​​a 、b ​​​​​​​之和

    示例:

    示例 1:

    输入: a = 1, b = 2

    输出: 3

    示例 2:

    输入: a = -2, b = 3

    输出: 1

    代码如下:

    def getSum(a, b):

    """

    :type a: int

    :type b: int

    :rtype: int

    """

    #位操作

    no_carry_sum=a^b #a与b不进位时的和,恰好与异或性质一样

    print(no_carry_sum)

    carry=(a&b)<<1 #a与b的和的进位,恰好是与或操作再左移一位

    print(carry)

    return sum([no_carry_sum,carry])#前两者之和

    res = getSum(12,3)

    print(res)

    总结:两个数的和可以通过将这两个数异或得到这个数不进位时的和,再将这两个数进行与或再左移一位,相当于进位的操作,再将这两个数相加,就可以得到两个数的和

    5.判断数字n的二进制数从右往左数第i位是否为1

    思路:1<

    用n与有特定位的指示数与或,就能判断n的特定位是否为1,【长数和短数与或只比较到短数的长度】

    举例:10的二进制数倒数第2位是否为1, 10–1010, 1<<1=2–10, 1010&10 = True

    代码如下:

    def isOne(n,i):

    print(n,1<

    return (n&(1<

    res = isOne(10,1)

    print(res) #True

    参考文献:

    【1】python中的进制、位运算

    【2】深入理解按位异或运算符

    【3】java:判断二进制数据中第n位是否为1

    【4】Python3.X中的位运算符

    展开全文
  • 按位异或运算

    2017-02-24 17:43:39
    & 按位与| 按位或^ 按位异或为什么5 & 3得到1; 5 | 3得到7; 5 ^ 3得到6. . 按位与运算 按位与运算符"&"是双目运算符。其功能是参与运算的两数各对应的进位相与。只有对应的两个进位均为1时,结果位才为1 ,...
    & 按位与
    | 按位或

    ^ 按位异或

    为什么5 & 3得到1; 5 | 3得到7; 5 ^ 3得到6. . 按位与运算 按位与运算符"&"是双目运算符。其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1 ,否则为0。参与运算的数以补码方式出现。 例如:9&5可写算式如下: 00001001 (9的二进制补码)&00000101 (5的二进制补码) 00000001 (1的二进制补码)可见9&5=1。   按位与运算通常用来对某些位清0或保留某些位。例如把a 的高八位清 0 , 保留低八位, 可作 a&255 运算 ( 255 的二进制数为0000000011111111)。

    main(){
    int a=9,b=5,c;
    c=a&b;
    printf("a=%d\nb=%d\nc=%d\n",a,b,c);
    }


    2. 按位或运算 按位或运算符“|”是双目运算符。其功能是参与运算的两数各对应的二进位相或。只要对应的二个二进位有一个为1时,结果位就为1。参与运算的两个数均以补码出现。
    例如:9|5可写算式如下: 00001001|00000101
    00001101 (十进制为13)可见9|5=13
    main(){
    int a=9,b=5,c;
    c=a|b;
    printf("a=%d\nb=%d\nc=%d\n",a,b,c);
    }


    3. 按位异或运算 按位异或运算符“^”是双目运算符。其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。参与运算数仍以补码出现,例如9^5可写成算式如下: 00001001^00000101 00001100 (十进制为12)
    main(){
    int a=9;
    a=a^15;
    printf("a=%d\n",a);
    }


    展开全文
  • 1.参加运算的两个数据,按照二进制进行按位与的运算运算规则:0&0=0;0&1=0;1&0=0;1&1=1; 即:两位同时为“1”,结果才为“1”,否则为0。 例如:3&5即 0000 0011 & 0000 0101 = 0000 ...

    1.参加运算的两个数据,按照二进制进行按位与的运算。

    运算规则:0&0=0;   0&1=0;    1&0=0;     1&1=1;

           即:两位同时为“1”,结果才为“1”,否则为0。

    例如:3&5  即 0000 0011 & 0000 0101 = 0000 0001   因此,3&5的值得1。

    3&5的与运算是先转换为二进制之后再进行规则比较得出最后的结果,为1.

     

    2.参加运算的两个对象,按二进制位进行“或”运算。

    运算规则:0|0=0;   0|1=1;   1|0=1;    1|1=1;

          即 :参加运算的两个对象只要有一个为1,其值为1。

    例如:3|5 即 0000 0011 | 0000 0101 = 0000 0111   因此,3|5的值得7。

     

    3.参加运算的两个数据,按二进制位进行“异或”运算。

    运算规则:0^0=0;   0^1=1;   1^0=1;   1^1=0;

       即:参加运算的两个对象,如果两个相应位为“异”(值不同),则该位结果为1,否则为 0。

    “异或运算”的特殊作用:

    (1)使特定位翻转 找一个数,对应X要翻转的各位,该数的对应位为1,其余位为零,此数与X对应位异或即可。

     

    例:X=10101110,使X低4位翻转,用X ^ 0000 1111 = 1010 0001即可得到。

    转载于:https://www.cnblogs.com/9527-/p/10115348.html

    展开全文
  • )参加运算的两个数,按二进制位进行“与”运算运算规则:只有两个数的二进制同时为1,结果才为1,否则为0。(负数按补码形式参加按位运算)即 0 & 0= 0 ,0 & 1= 0,1 & 0= 0, 1 & 1= 1。例:3 &...

    按位与运算符(&)

    参加运算的两个数,按二进制位进行“与”运算。

    运算规则:只有两个数的二进制同时为1,结果才为1,否则为0。(负数按补码形式参加按位与运算)

    即 0 & 0= 0 ,0 & 1= 0,1 & 0= 0, 1 & 1= 1。

    例:3 &5  即 00000011 & 00000101 = 00000001 ,所以 3 & 5的值为1。

    按位或运算符(|)

    参加运算的两个数,按二进制位进行“或”运算。

    运算规则:参加运算的两个数只要两个数中的一个为1,结果就为1。

    即  0 | 0= 0 ,  1 | 0= 1  , 0 | 1= 1  ,  1 | 1= 1 。

    例:2 | 4 即 00000010 | 00000100 = 00000110 ,所以2 | 4的值为 6 。

    异或运算符(^)

    参加运算的两个数,按二进制位进行“异或”运算。

    运算规则:参加运算的两个数,如果两个相应位为“异”(值不同),则该位结果为1,否则为0。

    即 0 ^ 0=0  , 0 ^ 1= 1  , 1 ^ 0= 1  , 1 ^ 1= 0 。

    例: 2 ^ 4 即 00000010 ^ 00000100 =00000110 ,所以 2 ^ 4 的值为6 。

    ————————————————

    版权声明:本文为CSDN博主「Wanidde」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

    原文链接:https://blog.csdn.net/wan_ide/article/details/81108941

    展开全文
  • 参加运算的两个对象,按二进制位进行运算。 进制转换地址:http://tool.oschina.net/hexconvert/ 一:与运算符(&) 预算规则: 0&0=0;0&1=0;1&0=0;1&1=1 即:两个同时为1,结果为1,...
  • 按位异或运算, 对等长二进制模式按位或二进制数的每一位执行逻辑按位异或操作. 操作的结果是如果某位不同则该位为1, 否则该位为0. xor运算的逆运算是它本身,也就是说两次异或同一个数最后结果不变,即(a xor b) ...
  • 计算机的逻辑运算和算术的逻辑运算的主要区别是:逻辑运算按位进行的,位与位之间不像加减运算那样有进位或借位的联系。逻辑运算主要包括三种基本运算:逻辑加法(又称“或”运算)、逻辑乘法(又称“与”运算)和逻辑...
  • Elog一个前端的HTTP缓存,hash就是一个普通的算法,按位异或运算二进制的运算法则,看似风马牛有点不相及,实则,一个简单的网页请求就能将他们三个串联起来。 二、什么是Etag ETag 是 Entity Tag 的缩写,中文...
  • 按位运算符是把数字看作是二进制来进行计算的。 下表中变量 a 为 60,b 为 13,二进制格式如下:a = 0011 1100 # 60的二进制 b = 0000 1101 # 13的二进制 ----------------- a&b = 0000 1100 a|b = 0011 1101 a^...
  • 输入已知变量值数一、数,选择正确的变量类型或计算方法(按位与、按位或、按位异或等),点击计算按钮,可求出其2进制、16进制、10进制的计算结果。1)“按位与”运算:记作and运算(符号"&"),相同位的两个数字...
  • 按位与 按位或 按位异或 运算

    万次阅读 2009-09-18 11:50:00
    1. 按位运算 按位与运算符"&"是双目运算符。其功能是参与运算的两数各对应的进位相与。只有对应的两个进位均为1时,结果位才为1 ,否则为0。参与运算的数以补码方式出现。 例如:9&5可写算式如下: 00001001 ...
  • 小韦老师@神犇营-my0053-模拟二进制按位运算 题目: 描述 给出两个二进制数,求其按位与、按位或、按位异或的结果。 输入 输入仅一行,为两个长度为 4 的二进制数字,用空格隔开。 输出 输出为三行。第一行输出按位...
  • #先将x,y按位异或运算,得到不相同位置上为1的整数z  int res = 0;  while(z != 0) { #计算整数z的二进制中1的个数,即为x和y的汉明距离  if (z%2 == 1) {  res++;  }  z = z/2;  }  ...
  • 按位与:0&0=0; 0&...按位异或,在或的基础上1 1也为0:0^0=0; 0^1=1; 1^0=1; 1^1=0;1.一个int型字段,存储十进制的数字,比如说是5那么该数字转成二进制是101,我自己定义从左往右数,第一位1...
  • 异或运算符的使用或运算符的使用与运算符搭配取反运算符的使用二进制位运算实战(1)-开发一个进制转换工具​mp.weixin.qq.com上篇文章主要讲了从ArrayBuffer内存中读取数据,也即是从bytes数组中读取每个单元格对应的...
  • 按位异或运算是指两个相应的二进制相同时结果为0,否则为1。 若欲交换两个变量的值,而又不借助其他的中间变量,那么在C++中可以用下面的语句:  a = a ^ b; //语句1  b = a ^ b; //语句2  a = a ^ b; //语句3...
  • 二进制位运算

    2016-10-18 16:49:49
    二进制的位运算有哪些? (1).按位and运算& (2).按位or运算| (3).按位异或运算^ (4).取反运算~ (5).左移运算 (6).右移运算>>
  • 异或运算可以理解为,两个数...反码:将二进制按位取反 补码:反码加 1 求负数的二进制数 以-14 举例 原码:14 即 00000000 00000000 00000000 00001110 反码: 11111111 11111111 11111111 11110001 补码: 111...
  • 两个二进制异或的结果

    千次阅读 2015-05-05 10:56:54
    【面试题目 -亢龙有悔整理】两个二进制异或结果是多少? a^b = |a-b| (按位相减取绝对值...二进制数的逻辑运算包括逻辑加法(“或”运算)、逻辑乘法(“与”运算)、逻辑否定(“非”运算)和逻辑“异或运算。 (1
  • 二进制位 :或 异或 与 操作

    万次阅读 2012-08-30 18:44:05
    ^ 按位异或 1. 按位与运算 按位与运算符"&"是双目运算符。其功能是参与运算的两数各对应的进位相与。只有对应的两个进位均为1时,结果位才为1 ,否则为0。参与运算的数以补码方式出现。 例如:9&5可写算式如下...
  • 异或运算异或运算可以看做是没有进位的加法,按位异或运算,相同为0,不同为1。0 ^ 0 = 00 ^ 1 = 11 ^ 0 = 11 ^ 1 = 0观察运算结果我们发现,当与0做异或运算时,另一元值不变;而与1做异或运算时,另一元值值取反。...
  • 列表的 异或和(XOR sum)指对所有元素进行按位 XOR 运算的结果。 如果列表中仅有一个元素,那么其 异或和 就等于该元素。 例如,[1,2,3,4] 的 异或和 等于 1 XOR 2 XOR 3 XOR 4 = 4 ,而 [3] 的 异或和 等于 3 。 ...
  • )参加运算的两个数据,按二进制位进行“与”运算运算规则:0&0=0; 0&1=0; 1&0=0; 1&1=1;即:两同时为“1”,结果才为“1”,否则为0例如:3&5 即 0000 0011 & 0000 0101 = 0000 0001 ...
  • 反码:正数的反码就是原码,负数的反码是符号位不变,其余位取反(对应正数按位取反)。补码:正数的补码就是原码,负数的补码是反码+1。符号位:最高位为符号位,0表示正数,1表示负数。在位运算中符号...
  • 1. 按位运算 按位与运算符"&"是双目运算符。其功能是参与运算的两数各对应的进位相与。只有对应的两个进位均为1时,结果位才为1 ,否则为0。参与运算的数以补码方式出现。 例如:9&5可写算式如下: ...
  • 首先要理解整数在机器内是如何用补码表示的:原码、补码、反码按位运算,就是对一个数(常量或变量)的二进制位与另一个数的对应二进制位进行运算。位运算有:& 位逻辑与,1&1等于1,1&0等于0,0&1...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,711
精华内容 684
关键字:

二进制按位异或运算