1. 取出数中任意k位置的二进制位是0还是1
n >> k & 1 原理:先把想要取出的位置移动到个位,1的二进制是 0001 , 进行与操作就可以提取出最后一位是0还是1;二进制是从右向左,由低到高,从0到7。
2. 右移操作 等于 n / 2^k , 左移操作 == n * 2 ^ k
3.取一个字节任意区间的十进制数,设置(辅助字节)全部位设置为0,根据想要获取的目标字节的区间,设置(辅助字节二进制位)中的对应区间部分,全部换成1,然后转为16进制。做&操作,按位与的结果就是目标自己区间的十进制表示形式。例如 0x67 & 0x1f = 7 ,01100111 & 00011111 (从0x67中取出该字节0-4后五位十进制表示)【注意:二进制的左边是高位,右边是低位,所以需要进行右移操作将需要获取的部分与最低位重合】例如0x80二进制位1000 0000 取出10的十进制操作为0x80 & 0xC0 >> 6
4.两个字节合并成一个16位short类型
unsigned short func = 0;func = func | data[7];
func = func << 8;
func = func | data[8];
5.lowbit
作用:取出二进制最后的1,例如整数2的二进制位是0010那么会取出10的部分。
应用:统计有多少个1。
思路:使用给定整数减去其中的最后一位1。
#include <iostream>
using namespace std;int lowbit(int x)
{return x & -x;
}int main()
{int x;cin >> x;int res = 0;while (x) x -= lowbit(x), res++;cout << res << endl;return 0;
}