关于位域如何节省内存(C++)
时间:2022-05-05
本文章向大家介绍关于位域如何节省内存(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 }
- [方法“Boolean Contains(System.Guid)”不支持转换为 SQL]的解决办法
- DataBind的一些试验
- 继承HibernateDaoSupport时遇到的问题 使用注解为HibernateDaoSupport注入sessionFa
- 常用代码
- 小程序的新功能你知道吗
- Mapxtreme之活活气死
- 仿淘宝的交易到计时JS
- 继小程序之后“小游戏”也来了,微信为此再次开启神秘入口
- (Head First 设计模式)学习笔记(3) --装饰者模式(StarBuzz咖啡店实例)
- 我的Js代码-按钮按下时判断是否选择了最后一行,给出提示
- (Head First 设计模式)学习笔记(2) --观察者模式(气象站实例)
- Spring Boot使用HandlerInterceptorAdapter和WebMvcConfigurerAdapter实现原始的登录验证
- 一条视频获C+融资 两个域名神助攻
- ExtJs与WCF交互:生成树
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 如何搭建一个高可用的服务端渲染工程
- [Go] Golang练习项目-GO语言实现插入排序
- vue3+webpack项目搭建实验
- HTML中p标签中插入div标签会发生什么
- K8S 在有赞 PaaS 测试环境中的实践
- Netty高级篇
- SQL工具集-查询会话等待
- 哈工大李志军操作系统实验1
- 有赞推荐系统关键技术
- 8086汇编格式
- React 中 getDerivedStateFromProps 的三个场景
- Java7的try-with-resources声明(转)
- 聊聊java中的哪些Map:(三)HashMap中的Iterator和Spliterator
- 聊聊java中的哪些Map:(四)LinkedHashMap源码分析
- CGroup 介绍