C++ 按位运算符

按位运算符

按位运算符有六个:

& 按位与(AND                            | 按位或(OR

^ 按位异或(EOR                         ~ 取反(NOT

>> 右移                                                 <<左移

 

1.AND运算符

AND运算符

0

1

0

0

0

1

0

1

char letter1 = ‘A’, letter2 = ‘Z’, result = 0;

result = letter1 & letter2;

计算:

letter10x41           0100         0001

letter2:    0x5A         0101         1010

result:      0x40          0100         0000

//result = ‘@’;

 

2.OR运算符

OR运算符

0

1

0

0

1

1

1

1

short vredraw = 0x01;

short hredraw = 0x02;

style = hredraw | vredraw;

hredraw0x02        0000         0000         0000         0010

vredraw0x01        0000         0000         0000         0001

style0x03               0000         0000         0000         0011

 

3.EOR运算符

EOR运算符

0

1

0

0

1

1

1

0

result = letter1^ letter2;

letter10x41           0100         0001

letter2:    0x5A         0101         1010

result:      0x1B                   0001         1011

// result此时为十进制的27

 

现在假设first的值是’A’ 0100 0001,last的值是’Z’ 0101 1010

first ^= last;               // f = 0001 1011

last ^= first;               // l = 0100 0001

first ^= last;               //f = 0101 1010

//firstlast在不占用任何中间存储单元的情况下交换了值。这适用于所有整数值。

 

4.NOT运算符

NOT运算符(取反)

0

1

~

1

0

result = ~letter;

如果letter0100 0001,那么变量result结果为1011 1110,即0xBE,或十进制值190

 

5.移位运算符

“离开”变量任一端的位都将丢失。

 

十进制数16387的二进制表示:          0100         0000         0000         0011

向左移动两位:                                          0000         0000         0000         1100                  结果:12

//(左边这两位向左移出边界,被舍弃)

向右移动两位:                                          0001         0000         0000         0000                   结果:4096

//(右边这两位向左移出边界,被舍弃)

你可能感兴趣的:(移位操作符,C++按位运算符,按位运算符)