C语言之位运算详解

位运算是指按二进制进行的运算。

在系统软件中,常常需要处理二进制位的问题。C语言提供了6个位操作运算符。这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与long类型。  

1、位运算符

运算符  含义

                      描述

    &  按位与 如果两个相应的二进制位都为1,则该位的结果值为1,否则为0
    |   按位或  两个相应的二进制位中只要有一个为1,该位的结果值为1
    ^  按位异或 若参加运算的两个二进制位值相同则为0,否则为1
    ~   取反 ~是一元运算符,用来对一个二进制数按位取反,即将0变1,将1变0
   << 左移   用来将一个数的各二进制位全部左移N位,右补0
   >> 右移 将一个数的各二进制位右移N位,移到右端的低位被舍弃,对于无符号数,高位补0

说明:

  1. 除了按位取反运算符~,其它均为双目运算符。
  2. 参加位运算的对象只能是整形或字符型数据,不能为实型数据 。
  3. 注意运算符的结合性和优先级问题。

2、位运算

(1)&(按位“与”)
运算规则为:
0&0=0,   0&1=0,   1&0=0,   1&1=1(即只有当两者都为真时才为真)
例如:-5&9的值为9,运算过程如下:

         -5 =  1111 1011
(&)9 =  0000 1001
   0000 1001

例如,-5&3的值为3,此时要把-5写成补码的形式,其补码为11111011,运算过程如下:

        -5 =  1111 1011
(&)3 = 0000 0011
   0000 0011

(2)|(按位“或”)
运算规则为:
0|0=0,   0|1=1,   1|0=1,   1|1=1(即只要有一个为真时才为真)
例如:5|9的值为13,运算过程如下:

          5 =  0000 0101
  (|)9 = 0000 1001
   0000 1101

(3)^(按位“异或”)
运算规则为:
0^0=0,   0^1=1,   1^0=1,   1^1=0(即当两者取值相异时为真)
例如:-5|3的值为-8,运算过程如下:

         -5 = 1111 1011
 (^)3 = 0000 0001
  1111 1000

(4)~(按位“取反”)
运算规则为:
~0=1,   ~1=0(取相反的值)
例如:~7的值为-8,运算过程如下:

(~)7 = 0000 0111
  1111 1000

(5)<<(“左移”)
用佬将一个数的各二进制位全部左移若干位,右边空缺位补0.
例如:将3左移2位,结果为12。如图:

                                           左移2位
                          00000011----->00001100

左移1位相当于该数乘以2,左移n位相当于该数乘以2的n。因此,将3左移2位,相当于3乘以4。

(6)>>(“右移”)
用来将一个数的各二进制全部右移若干位。移去右端的位将被舍弃,若为无符号数,左端补0。例如,将15右移3位,结果为1。如图:

                                           右移3位
                           00001111----->00000001

右移1位相当于该数除以2,右移n位相当于该数除以2的n次方,因此,将15右移3位,相当于15/2的3次方=1(C语言规定整数相除商为整数)。

发布了136 篇原创文章 · 获赞 198 · 访问量 15万+

猜你喜欢

转载自blog.csdn.net/qq_42680327/article/details/99862200