关于位域如何节省内存(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  }
View Code

    

 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  }

 

你可能感兴趣的:(C++)