什么是位?
内存的基本单元是字节, 一个字节有 8 位.
有那些操作符
1.位与 &
0 & 0 0
0 & 1 0
1 & 0 0
1 & 1 1
cout << " 8 & 3 = " << (8 & 3) << endl;
-----------------
得到 00010001
ps:对应位, 都是 1, 结果才是 1
2.位或 |
0 | 0 0
0 | 1 1
1 | 0 1
1 | 1 1
cout << " 8 | 3 = " << (8 | 3) << endl;
---------------
ps:对应位, 都是 0, 结果才是 0 只要有一位是 1, 结果就是 1
3.位非 ~
~ 1 0
~ 0 1
取反
unsigned char x = ~8;
cout << (int)x << endl;
4.异或 ^
0 ^ 0 0
1 ^ 1 0
0 ^ 1 1
1 ^ 0 1
---------------
cout << (8^3) << endl;
对应位不同, 结果才是 1
<< 左移
右边的位用 0 来填充, 移动超出左边边界的位则直接抛弃。 向左移动 n 个位置,就等同于乘以 2 的 n 次方
cout << (8<<3) << endl; 得到8*2*2*2 = 64
ps:只适用于: int/short/long/char 等定点数类型(float/double 浮点数类型不能使用)
>> 右移
如果左操作数是无符号类型,则左边多出来的位用 0 来填充。 如果左操作数是有符号类型,则左边多出来的位用 符号位(最高位) 来填充,既原来最高位是是什么,右移后,依然补充原来最高位的数。 向左移动 n 个位置,就等同于除以 2 的 n 次方
cout << (8>>3) << endl; 得到1
ps:只适用于: int/short/long/char 等定点数类型(float/double 浮点数类型不能使用)
应用: 把一个整数的的最低 4 位设置为 0110
cout << "请输入一个整数: " << endl;
cin >> x;
x = x & (~15);
x = x | 6;
cout << "x=" << x << endl;
ps:代码或思路若有问题请评论指出
|