分享
 
 
 

C++Notes(2)--关于位运算

王朝c/c++·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

位向量是一种用来记录一组项目或条件的是/否标志,c++语言中的位操作符允许程序员设置或测试位向量中独立的位或位域。举例来说,可以用一个位向量来记录一个32个学生的班级中一次测试的结果,第i位代表了学号为i的学生(假设学号从0开始)是否通过了本次测试。(位置1表示通过,置0表示未通过),(注:以下内容默认机器为32位)

过程如下:

/*将所有位置0*/

unsigned int quiz=0;

/*将pos位置1*/

inline void set(unsigned int & ui,int pos){

ui|=(1<<pos);

}

/*将pos位置0*/

inline void clr(unsiged int & ui,int pos){

ui&=~(1<<pos);

}

/*将pos位翻转*/

inline void flip(unsiged int & ui,int pos){

ui^=(1<<pos);

}

/*测试pos位是否为1*/

inline void test(unsiged int & ui,int pos){

return ui&(1<<pos);

}

下面的问题在于如果这个班级的大于32个人,比如说100人该如何去处理呢?很显然,我们需要(1+100/32)个字去记录这些位,方法是将这些字组成一个数组,数组中的第i个字记录了从第i位到第i+31位的标志。

代码如下:

/*以下3个值由32位机器确定,如果机器位64位,则做相应改动*/

#define BITSPERWORD 32

#define SHIFT 5

#define MASK 0x1F

#define N 100

unsigned int a[1+N/BITSPERWORD];

void set (int i){

a[i>>SHIFT]|=1<<(i&MASK);

}

void clr(int i){

a[i>>SHIFT]&=~(1<<(i&MASK));

}

void flip(int i){

a[i>>SHIFT]^=(1<<(i&MASK));

}

bool test(int i){

return a[i>>SHIFT] & (1<<(i&MASK));

}

幸运的是,c++为我们提供了bitset类,可以方便的定义一个大于32位的位向量,并且提供了现成的 set,reset,flip等操作,其内部实现也应该采用的是上述方法。对于c++用户应该尽量使用bitset类。

参阅书籍:C++Primer Programming Pearls

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有