操作二进制位串的工具
一.位运算符
- 位运算符作用于整数类型的对象,并把运算对象看成是二进制位的集合。
- 它提供检查和设置二进制位的功能。
运算符 |
功能 |
用法 |
~ |
位求反 |
~expr |
<< |
左移 |
expr1 << expr2 |
>> |
右移 |
expr1 >> expr2 |
& |
位与 |
expr1 & expr2 |
^ |
位异或 |
expr1 ^ expr2 |
| |
位或 |
expr1 |
- 符号位的处理没有规定,因此建议仅用于处理无符号类型
- 一般来说,如果运算对象是”小整型“,则它的值会被自动提升成较大的整数类型。运算对象可以是带符号的,且为负,则如何处理”符号位“依赖于机器。而且此时左移可能会改变符号位的值,是一种未定义行为。
- 整型提升:任何使用了char,short,整型位域或者枚举类型的表达式,(bool、char、signed char、unsigned char、short、unsigned short等小于int的类型),如果装得下,都会被提升成int类型;否则提升为unsigned int。较大的char(wchar_t、char_16_t、char_32_t)则提升为int–unsigned long long中刚好能装下其所有可能的一种
移位运算符
对运算对象执行基于二进制的移动操作
unsigned char bits = 0233;// 0233是八进制的字面值
0X12342 |
0X12343 |
0X12344 |
0X12345 |
其 余 的 数 据 |
其 余 的 数 据 |
其 余 的 数 据 |
1 0 0 1 1 0 1 1 |
bits << 8;
0X12342 |
0X12343 |
0X12344 |
0X12345 |
0 0 0 0 0 0 0 0 |
0 0 0 0 0 0 0 0 |
1 0 0 1 1 0 1 1 |
0 0 0 0 0 0 0 0 |
bits <<