关于位域如何节省内存(C++)
位域: 最先使用在c语言中后来C++继承了这一优良的特点。
举个栗子: int --> 4字节 2^32位 ,如果我们只需要其表达一个0~16的数字,
使用一个int就显得稍稍有些许浪费,所以我们这里就可以使用到位域0~16 --> 2^1 ~ 2^5
我们就可以这样来声明了: int sudo: 5; 就可以了!
1 /* 2 设计一个结构体存储学生的成绩信息, 3 需要包括学号,年纪和成绩3项内容,学号的范围是0~99 999 999, 4 年纪分为freshman,sophomore,junior,senior四种, 5 成绩包括A,B,C,D四个等级。 6 请使用位域来解决: 7 */ 8 #include<iostream> 9 10 using namespace std; 11 12 enum Age{ freshman , sophomore , junior ,senior } ; 13 14 enum grade{ A , B , C , D }; 15 16 class student { 17 private : 18 unsigned int num :27; 19 Age age : 2 ; 20 grade gra:2 ; 21 public : 22 /* 析构函数 */ 23 ~ student(){ 24 cout<<"student has been xigou l ! "; 25 } 26 /* 构造函数 */ 27 student(unsigned int num , Age age , grade gra ); 28 void show(); 29 } ; 30 31 student::student(unsigned int num , Age age , grade gra ):num(num),age(age),gra(gra){ 32 }; 33 34 inline void student::show(){ 35 36 cout<<"学号为:"<<this->num<<endl; 37 string sag; 38 //采用枚举 39 switch(age){ 40 case freshman : sag = "freshman" ; break ; 41 case junior : sag = "junior" ; break ; 42 case senior : sag = "senior" ; break ; 43 case sophomore : sag = "sophomore" ; break ; 44 } 45 cout<<"年纪为:"<<sag<<ends; 46 cout<<"成绩为:"<<char(‘A‘+gra)<<endl; 47 } 48 49 int main(int args [] ,char argv[]){ 50 51 student stu(12345678,sophomore,C) ; 52 stu.show(); 53 cout<<sizeof stu<<endl; 54 return 0; 55 }
1 /* 2 编写一个名为CPU的类,描述一个CPU的以下信息: 3 时钟频率,最大不会超过3000MHZ = 3000*10^6 ;字长,可以 4 是32位或64位;核数,可以是单核,双核,或四核,是否 5 支持超线程。各项信息要求使用位域来表示。通过输出sizeof 6 (CPU)来观察该类所占的字节数。 7 */ 8 #include<iostream> 9 #include<string> 10 using namespace std; 11 //字长 12 enum word{ a, b }; 13 //核数 14 enum keshu{one ,two ,four }; 15 //是否支持超线程 16 enum es_no{yes ,no} ; 17 18 class intel_CPU{ 19 private : 20 // 2^29 = 536 870 912 21 unsigned int tp : 29 ; 22 word wd : 1 ; 23 keshu ks : 2 ; 24 es_no en : 1 ; 25 public : 26 //构造函数 27 intel_CPU(int tp=0,word wd=a,keshu ks=two,es_no en=no): 28 tp(tp),wd(wd),ks(ks),en(en){ 29 cout<<"this is a construct !"<<endl; 30 }; 31 //析构函数 32 ~intel_CPU(); 33 void show(); 34 35 }; 36 intel_CPU::~intel_CPU(){ 37 38 cout<<"this is a 析构函数!!"<<endl; 39 } 40 41 void inline intel_CPU::show() { 42 43 cout<<"时钟频率为:"<<ends; 44 cout<<tp<<endl; 45 cout<<"字长为【32 or 64】: "; 46 if(wd==a)cout<<32<<endl; 47 else cout<<64<<endl; 48 switch (ks){ 49 case one : cout<<"单核"<<endl; break; 50 case two : cout<<"双核"<<endl; break; 51 case four: cout<< "四核”"<<endl; break; 52 default : cout<<"山寨机,没核" ; break; 53 } 54 cout<<"是否支持超线程模式:"<< (en==yes?"支持":"不支持")<<endl; 55 } 56 57 int main(){ 58 59 intel_CPU icp(123456789); 60 icp.show(); 61 cout<<sizeof icp<<endl; 62 63 }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。