按位运算符(>> << ~ & ^ | )及实例

来源:互联网 发布:linux chgrp 单词 编辑:程序博客网 时间:2024/04/27 10:15

1.移位运算符 :运算符<<和运算符>>的操作数可以是任意整型或字符型的。对两个操作数都会进行整型提升,返回的类型是左边操作数提升后的类型。

   i<<j的值是将i中的位左移j位后的结果。每次从i的最左端溢出一位,在i的最右端补一个0位。

   i>>j的值是将i中的位右移j位后的结果。如果i是无符号数或者非负数,则需要左端补一个0位。如果i是负数,其结果由实现定义的。

 例如:

  unsigned int i,j;

  i = 13;          //  i的二进制数为:            0000000000001101

  j = i << 2;    //  j的值为52,二进制为:0000000000110100

  j = i >> 2;   //j的值为3    二进制为:     0000000000000011

 2.按位求反运算符 (~)    按位与运算符(&)      按位异或运算符(^)    按位或运算符(|):这四种运算符都是对操作数的每一位执行布尔运算。

   ~ 运算符:对操作数求反操作,即将每一个0替换成1,把每一个0替换成1;

    & 运算符:两个操作数相应的位执行逻辑与运算。

    ^ 和 | 运算符:  都是对两个操作数执行逻辑或运算,差异是当两个操作数的位都是1时,^产生0而|产生1.


例如:

  int i, j,k;

  i = 21 ;      //二进制数为:                     0000000000010101

  j = 56 ;     // 二进制数为:                     0000000000111000

  k = ~i ;    // k = 65514  二进制数为:    1111111111101010

  k = i ^ j;    // k = 45      二进制为:         0000000000101101

  k = i & j;    // k = 16   二进制为:           0000000000010000

  k = i | j ;    //   k = 61   二进制为:          0000000000111101


优先级: 由高到低:    ~  &   ^   |