C语言-位操作符

上一篇 / 下一篇  2012-09-24 18:55:49 / 个人分类:c语言

  
&按位与
 

    23:  000000000  000000000  000000000  00010111 

    56:  000000000  000000000  000000000  00111000

      ---------------------------------------------------------------------------&

    000000000   000000000  000000000  00010000        16

 

用途:

1、经常用来屏蔽某些二进制位(置零)

    如: 把 10111101 ( 0xBD)第四位置零:

       000000000 000000000 000000000   10111101                 0xBD

        000000000 000000000 000000000    11110111                 0xF7

     ---------------------------------------------------------------------------&

       000000000 000000000 000000000    10110101                0xB5

 

  2、想知道某一位是1还是0

       如: 想知道10111101第四位是0还是1

           000000000 000000000 000000000   10111101   

           000000000 000000000 000000000   00001000 ---------------------------------------------------------------------------&

                                                                                     1

按位与操作结果的第四位结是1, 被操作数第四位则是1,是0则是0

 

-18的二进制位:

 

 

|按位或
 
a=-18, b=56, r=a|b
  -18的二进制位是:
  首先, 负数在计算机是以补码的形式存在的。
  如何计算它的补码呢?
  1、先计算出18的二进制原码:00000000 00000000 00000000 00010010
  2、按位取反,再加一, 结果为:111111111 11111111 11111111 11101110  
 
 
  a|b:
  

-18:             

&按位与

23: 000000000 000000000 000000000 00010111

56: 000000000 000000000 000000000 00111000

---------------------------------------------------------------------------&

000000000 000000000 000000000 00010000 16

用途:

1、经常用来屏蔽某些二进制位(置零)

如: 把 101111010xBD)第四位置零:

000000000 000000000 000000000 10111101 0xBD

000000000 000000000 000000000 11110111 0xF7

---------------------------------------------------------------------------&

000000000 000000000 000000000 10110101 0xB5

2、想知道某一位是1还是0

如: 想知道10111101第四位是0还是1

000000000 000000000 000000000 10111101

000000000 000000000 000000000 00001000 ---------------------------------------------------------------------------&

1

按位与操作结果的第四位结是1, 被操作数第四位则是1,是0则是0

-18的二进制位:

|按位或
a=-18, b=56, r=a|b
-18的二进制位是:
首先, 负数在计算机是以补码的形式存在的。
如何计算它的补码呢?
1、先计算出18的二进制原码:00000000 00000000 00000000 00010010
2、按位取反,再加一, 结果为:111111111 11111111 11111111 11101110
a|b:

-18: 111111111     11111111         11111111 11101110    

56: 000000000 000000000 000000000 00111000

---------------------------------------------------------------------------|

000000000 000000000 000000000 11101110

 

用途: 1、经常用来把某位置1

                       2、或得指定位是1还是0(让它与全1,只有要判定位是0的二进制数做按位与操作。)
 
^按位异或
相同为0 , 不同为1.
0^x=x
1^x=~x
 
 

~按位取反

相当于,加一, 再符号位反转

-1二进制位是全1

 

<<左移

在不丢失有效位的情况下,左移n 相当于乘以2n次方,无论正负数。

>> 

在不丢失有效位的情况下,右移n 相当于整除2n次方,无论正负数。

 

左移右边空位补0 右移左边空位补符号位,无符号数补零。

 

 

C语言区分的是操作数是有符号数,还是无符号数。

 

Java 还有<<< >>>有符号左移, 有符号右移。

 

Int x = 0xabcdef;

X&0xFF;

x>>=8&0xFF

x>>=8&0xFF

x>>=8&0xFF


TAG:

 

评分:0

我来说两句

Open Toolbar