C++程序员

Cpp:位操作符

2015-11-26  本文已影响221人  LuuilX

位操作符:位操作符操作的整数可以是有符号或无符号数。

操作符 功能 用法
~ 求位反 ~expr
<< 左移 expr1 << expr2
>> 右移 expr1 >> expr2
& 位与 expr1 & expr2
^ 位异或 expr1 ^ expr2
位或 expr1 expr2

下面的例子,假设unsigned char有8位:

bitset对象或整型值的使用

unsigned long 有 32 位

bitset<30> bset;    //大小为30的bitset,每一位默认值0
unsigned long val = 0;

如果要将第27位设为1,有如下两种方式

bset.set(27);        //法1
val |= 1UL << 27;    //法2

如果要将第27位重新设为0

val &= ~(1UL << 27);

而要测试第27位是否为1,则可以

bool is_1 = val & (1UL << 27);

举例

unsigned long val1 = 3, val2 = 8;
cout << (val1 & val2) << endl;
cout << (val1 | val2) << endl;

输出

0
11

因为unsigned long有32位,所以 3 对应二进制位为:0(30个0)11; 8 的二进制:0(28个0)1000

通常来说,bitset更易阅读和理解。

将移位操作符用于IO

一直再用的 cout<<cin>> 就用到了移位操作符,IO操作符是左结合的

cout << "he" << "llo" << endl;

等价于

((cout << "he") << "llo") << endl;

举例

cout << 10+10;    //ok
cout << (10>2);    //ok
cout << 10 > 2;    //error: 试图将 cout 与 2 比较

上例因为 + 优先级高于>>, 而 > 低于 >>

END.


上一篇下一篇

猜你喜欢

热点阅读