按位运算符,按位异或计算器

  按位运算符,按位异或计算器

  运算中涉及的两个数据根据二进制位是“与”。

  运算规则: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。

  此外,负数以补码的形式参与按位and运算。

  特殊用途和操作:

  (1)复位。如果要将一个单元格清零,即使它的二进制位都是0,也只需要用一个所有位都是0的数值求和,结果就是0。

  (2)取一个号码,指向位置。

  方法:找一个数,对应x要取的位,这个数对应的位是1,其余位是0。X中指定的位可以通过与这个数的AND运算得到。

  例:设X=10101110,

  X的低4位可以用X 0000 1111=0000 1110得到;

  它也可以用来取x的第2、4和6位。

  按位或运算符()

  参与运算的两个对象根据二进制位进行或运算。

  运算规则:0 0=0;01=1;10=1;11=1;

  也就是说,只要参与运算的两个对象中有一个是1,它的值就是1。

  例如:35等于0000 0011 0000 0101=0000 0111因此,35等于7。

  此外,负数以补码的形式参与按位或运算。

  OR运算的特殊功能:

  (1)经常用来检查一个数据的某些位置。

  方法:找出对应于X被设置为1的位的数字。这个数对应的位是1,其余位是0。这个数与X同相或者可以在X ^ 1中做一些位置。

  例如:用X 0000 1111=1010 1111得到x=1010000的低4位1。

  XOR运算符()

  运算中涉及的两个数据根据二进制位进行异或运算。

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

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

  异或运算的特殊功能;

  (1)翻转一个特定的位找到一个数,这个数对应于要翻转的X的每一位。这个数对应的位是1,其余位是0。这个数可以与x的相应位进行异或运算。

  例:x=1010110,翻转x的低4位,用x 0000 1111=1010 0001得到。

  (2)不同于0或,保持原值,x 0000 0000=1010 1110。

  从上面的例子可以清楚地看出这一点。

  反转运算符(~)

  参与运算的数据根据二进制位被“求反”。

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

  也就是一个二进制数逐位反转,即0变成1,1变成0。

  设一个数的最低位为零,可以表示为:a ~1。

  ~1的值是111111111111111110,然后最低位必须是0被and。因为“~”运算符的优先级高于算术运算符、关系运算符、逻辑运算符和其他运算符。

  左移运算符()

  将操作数的所有二进制位向左移动若干位(左边的位被丢弃,右边的位用0填充)。

  例:a=a 2将A的二进制位左移2位,右加0,

  左移1位后a=a * 2;

  如果左移过程中丢弃的高位不包含1,则每次左移相当于将该数乘以2。

  右移位运算符()

  一个数的所有二进制位都右移若干位,正数左移0,负数左移1,右侧丢弃。

  运算的每一位都向右移动,相当于把数除以2。

  例如:a=a 2将A的二进制位右移2位,

  向左加0或1取决于移位后的数字是正数还是负数。

  将运算符expression1的所有位向右移动expression2指定的位数。表达式1的符号位用于填充右移后留下的空位。移出到右边的比特被丢弃。

  例如,在评估以下代码后,temp的值为-4:

  -14(即二进制11110010)通过右移两位等于-4(即二进制1111100)。

  可变温度=-14 2

  无符号右移位运算符()

  将运算符expression1的每一位向右移动expression2指定的位数。右移后留下的空位用零填充。移出到右边的比特被丢弃。

  示例:var temp=-14 2

  变量temp的值为-14(二进制111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111

  复合赋值运算符

  位运算符与赋值运算符相结合

  =例:a =b等价于A=A B。

  =例:a=b等价于A=A B。

  =例:a=b等价于A=A B。

  =例:a ^=b等价于A=A B

  运算规则:类似于前面提到的复合赋值运算符的运算规则。

  对不同长度的数据执行位操作。

  如果两个长度不同的数据进行位运算,系统会将它们在右端对齐,然后进行位运算。

  以AND运算为例,解释如下:我们知道在C语言中,long类型占用4个字节,int类型占用2个字节。如果一个long类型的数据是和一个int类型的数据,右端对齐后,左边不足的位会按照以下三种情况来补齐。

  (1)如果整数数据为正,则向左加16个零。

  (2)如果整数数据为负,则向左加16个1。

  (3)如果整形后的数据是无符号数,则在左侧添加16个零。

  例如长a=123int b=1;算个b。

  例如长a=123int b=-1;算个b。

  例如长a=123无符号int b=1;算个b。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: