神奇的位操作们

不羁岁月 提交于 2019-12-24 06:14:52

位操作是一种灵活、强大的编程技巧。
最简单的使用场景,是将多个字段压到一个字段中,这样可以使用更少的交互来传递更多的内容。
这在LBA编址上很常见,如一个LBA应该编码进去lunId, poolId, 是否压缩,lun中逻辑地址。
也常用在信息收发上:如socket中的包头,将多种信息压缩到一个头中一次收发。
此处需要注意的是位的偏移长度,以及在实现的时候需要注意将每个字段强转为待压字段的长度单位。

还有一些不太常用的但是很有意思的,记录一下,说不定哪天就能提供一个更好的思路:

//返回val中二进制位里1的个数:
int findBitOnesCount(int val){
    int cnt = 0;
    while(val){
        cnt++;
        value = value &(value-1);
    }
    return cnt;
}
//使用一个bitmap来表示是node_id的添加、删除,查询是否在其中:
int node_set;

int add_node_to_node_set(node_set,node_id){
	return	node_set | (1 << node_id);
}
int remove_node_from_node_set(node_set,node_id){
    return node_set & ~(1<<node+id);
}
bool is_node_in_node_set(node_set,node_id){
	return ((node_set &(1<<node_id))!=0);
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!