运算符 |、||、&、&&、异或、~、!、

位运算:  位运算的运算分量只能是整型或字符型数据,位运算把运算对象看作是由二进位组成的位串信息,按位完成指定的运算,得到位串信息的结果。


8进制通常以0开头,16进制通常以0x开头。8进制1位对应3位2进制,16进制一位对应4位2进制。

二进制                                   八进制                            二进制                                          十六进制             二进制                                    十六进制                    

  000                                          0                                  0000                                                  0                 1000                                           8

  001                                          1                                  0001                                                  1                 1001                                           9

  010                                          2                                  0010                                                  2                 1010                                           A

  011                                          3                                  0011                                                  3                 1011                                           B

  100                                          4                                  0100                                                  4                 1100                                           C

  101                                          5                                  0101                                                  5                 1101                                           D

  110                                          6                                  0110                                                  6                 1110                                           E

  111                                          7                                  0111                                                  7                 1111                                           F

10进制转二进制:正整数转二进制,负整数转二进制,小数转二进制;

1>正整数转成二进制:除二取余,然后倒序排列,高位补零。

2>负整数转换成二进制: 先是将对应的正整数转换成二进制后,对二进制取反,然后对结果再加一。还以42为例,负整数就是-42,如图4所示为方法解释。最后        即为:(-42)10=(11010110)2

运算符 |、||、&、&&、异或、~、!、_第1张图片

3>小数转换为二进制:对小数点以后的数乘以2,有一个结果,取结果的整数部分(不是1就是0喽),然后再用小数部分再乘以2,再取结果的整数部分……以此类推,直到小数部分为0或者位数已经够了就OK了。然后把取的整数部分按先后次序排列就OK了,就构成了二进制小数部分的序列,举个例子吧,比如0.125,如图5所示。

                       运算符 |、||、&、&&、异或、~、!、_第2张图片

(1)按位与运算符(&) : 0 & 0 = 0, 0 & 1 = 0, 1 & 0 = 0, 1 & 1 = 1。

        按位与运算有两种典型用法,一是取一个位串信息的某几位,如以下代码截取x的最低7位:x & 0177。二是让某变量保留某几位,其余位置0,如以下代码让x只保留最低6位:x = x & 077。以上用法都先要设计好一个常数,该常数只有需要的位是1,不需要的位是0。用它与指定的位串信息按位与。


(2)按位或运算符(|):0 | 0 = 0, 0 | 1 = 1, 1 | 0 = 1, 1 | 1 = 1

        按位或运算的典型用法是将一个位串信息的某几位置成1。如将要获得最右4为1,其他位与变量j的其他位相同,可用逻辑或运算017|j。若要把这结果赋给变量j,可写成: j = 017|j


(3)按位异或运算符(^): 0 ^ 0 = 0, 0 ^ 1 = 1, 1 ^ 0 = 1, 1 ^ 1 = 0

        按位异或运算的典型用法是求一个位串信息的某几位信息的反。如欲求整型变量j的最右4位信息的反,用逻辑异或运算017^j,就能求得j最右4位 的信息的反,即原来为1的位,结果是0,原来为0的位,结果是1。交换两个值,不用临时变量.


(4)按位取反运算符(~)

        按位取反运算是单目运算,用来求一个位串信息按位的反,即哪些为0的位,结果是1,而哪些为1的位,结果是0。例如, ~7的结果为0xfff8。


(5)左移运算符(<<) :在二进制数运算中,在信息没有因移动而丢失的情况下,每左移1位相当于乘2。如4 << 2,结果为16。


(6)右移运算符(>>):与左移相反,对于小整数,每右移1位,相当于除以2。

        在右移时,需要注意符号位问题。对无符号数据,右移时,左端空出的位用0补充。对于带符号的数据,如果移位前符号位为0(正数),则左端也是用0补充;如果移位前符号位为1(负数),则左端用0或用1补充,取决于计算机系统。对于负数右移,称用0 补充的系统为“逻辑右移”,用1补充的系统为“算术右移”。




你可能感兴趣的:(c位操作符)