首页 > 学院 > 开发设计 > 正文

位域

2019-11-08 02:24:28
字体:
来源:转载
供稿:网友

位域

当我们需要节省内存,比如某个变量值只有0和1两种状态,或者两个值都只是不超过127的数,如何节省内存呢?当然可以直接定义变量进行位操作,但是位操作往往会涉及到较多的& |之类的操作,往往不能让人一眼就明白要表达的意思。实际上,使用“位域”可以轻松实现上述需求,并且可读性较强。 - 使用位操作: 代码:

int main(){ unsigned char a=0; a=a&0x0f|0xB0; a=a&0xf0|0x05; cout<<(int)a<<endl; cout<<hex<<(int)a<<endl; return 0;}

效果: 这里写图片描述

这样能得到预期的结果,但是实际上比较繁琐,别人看你的代码的时候需要仔细看你的位操作才能明白是干嘛的。

使用位域 位域其实就是将一个变量看做一个结构,而每一个域对应操作某一些位,在使用的时候需要保证不溢出,不然就出问题了 代码:

struct a{unsigned char b : 4;unsigned char c : 4;}a;int main(){struct a a;cout <<"size:" <<sizeof a << endl<<endl;for (a.b = 1; a.b<10; ++a.b){ for (a.c = 1; a.c<10; ++a.c) { if (a.b % 3 != a.c % 3) cout << (int)(a.b) << " " << (int )(a.c) << " "; else cout<<" "; } cout << endl;}return 0;}

这个题目据说是微软的一个面试题,具体题目记不清了,大概是只允许使用一字节变量遍历一个9*9的棋盘,然后干啥、、、 效果 这里写图片描述

位域操作相对位操作来说直接明了得多,容易阅读,实际上c++的bitset类也可以很容易的用于空间要求高的场合。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表