[C/C++不常见语法特性]_[位域的使用细节]

场景:

1.位域作为一个控制空间大小的语法特性其实是有它自己的用武之地的,比如网络通讯的协议定制,使用位域为1来严格限制bool值为0,1等等.

2.它有一些细节需要注意,

第一: 位域的大小是值的类型的整数倍,不足整数倍的补全.如unsigned short的大小是16位,那么如果总值17位的话会自动补全到16*2=32位.

第二: 赋值当然需要位运算符或者不超过它的最大值的整数.

代码:

#include <stdlib.h>
#include <assert.h>
#include <time.h>
#include <iostream>
#include <string>
#include <vector>

using namespace std;

typedef unsigned int Bit;

class NetData
{
public:
	Bit type: 1;
	Bit valid: 1;
	Bit delay_second: 4;
	Bit command: 4;
	Bit finished: 1;
	Bit error: 4;
	unsigned char t: 2;

};

int main(int argc, char const *argv[])
{
	cout << "NetData size:" << sizeof(NetData) << endl;
	NetData nd;
	nd.type = 01;
	nd.valid = 00;
	nd.delay_second = 15; //如果是>15,gcc会有警告 warning: large integer implicitly truncated to unsigned type
	nd.command = 13;
	nd.finished = 1;
	nd.error = 2;

	cout << "nd.type: " << nd.type << endl
	     << "nd.valid: " << nd.valid << endl
	     << "nd.delay_second: " << nd.delay_second << endl
	     << "nd.command: " << nd.command << endl
	     << "nd.finished: " << nd.finished << endl
	     << "nd.error: " << nd.error << endl
	     << endl;
	return 0;
}

输出:

NetData size:4
nd.type: 1
nd.valid: 0
nd.delay_second: 15
nd.command: 13
nd.finished: 1
nd.error: 2

参考: 《C++ Primer 3rd Edition》

[C/C++不常见语法特性]_[位域的使用细节]

时间: 2024-08-03 07:36:44

[C/C++不常见语法特性]_[位域的使用细节]的相关文章

[C/C++不常见语法特性]_[初级]_[左值-右值-lvalue-rvalue]

参考:1. http://en.cppreference.com/w/cpp/language/value_category   << Value categories >> 2. https://msdn.microsoft.com/en-us/library/dd293668.aspx   << Rvalue Reference Declarator: && >>3. https://msdn.microsoft.com/en-us/li

总结常见的ES6新语法特性

总结常见的ES6新语法特性 ES6给我们带来了更"甜"的语法糖(一种语法,使得语言更容易理解和更具有可读性,也让我们编写代码更加简单快捷),如箭头函数(=>).class等等.用一句话来说就是: ES6给我们提供了许多的新语法和代码特性来提高javascript的体验 不过遗憾的是,现在还没有浏览器能够很好的支持es6语法,点这里查看浏览器支持情况,所以我们在开发中还需要用babel进行转换为CommonJS这种模块化标准的语法. 因为下面我会讲到一些es6新特性的例子,如果想要

总结常见的ES6新语法特性。

前言 ES6是即将到来的新版本JavaScript语言的标准,他给我们带来了更"甜"的语法糖(一种语法,使得语言更容易理解和更具有可读性,也让我们编写代码更加简单快捷),如箭头函数(=>).class等等.用一句话来说就是: ES6给我们提供了许多的新语法和代码特性来提高javascript的体验 不过遗憾的是,现在还没有浏览器能够很好的支持es6语法,点这里查看浏览器支持情况,所以我们在开发中还需要用babel进行转换为CommonJS这种模块化标准的语法. 因为下面我会讲到一

C/C++笔试忍法帖04——C/C++语法特性篇

1.Heap与stack的差别 Heap是堆,stack是栈. Stack的空间由操作系统自动分配/释放,Heap上的空间手动分配/释放. Stack空间有限,Heap是很大的自由存储区 C中的malloc函数分配的内存空间即在堆上,C++中对应的是new操作符. 程序在编译期对变量和函数分配内存都在栈上进行,且程序运行过程中函数调用时参数的传递也在栈上进行. 2.In C++, what does "explicit" mean? what does "protected&

PHP. 01. C/S架构、B/S架构、服务器类型、服务器软件、HTTP协议/服务器、数据库、服务器web开发、PHP简介/常见语法、PHPheader()、 PHP_POST/GET数据获取和错误处理

C/S架构 Client/Server 指客户端,服务器 架构的意思 优点:性能性高:可将一部分的计算工作放在客户端上,服务器只需处理出局即可   洁面炫酷,可使用更多系统提供的效果 缺点:更新软件需版本同步 不同设备访问:必须安装了客户端才能登陆 B/S架构 Browser /Server 指浏览器, 服务器.是WEB兴起后的一种结构 优点:更新简洁,对用户来说只需刷新浏览器即可   多设备同步:只要能够使用浏览器即可登录 缺点:性能较低:当时随着硬件性能的提升,这个差距在缩小   浏览器兼容

服务端web开发:PHP简介以及常见语法

服务端web开发 在讲解什么是服务端开发之前,让我们先思考几个问题 网站访问: 当我们做好了.html的网站,如何让别人(朋友,用户)可以访问到呢? 使用U盘拷贝,QQ发送文件等直接将文件共享的方式?---不灵活 将网站放在服务器上,让用户通过网址访问?---绝大多数网站的做法 网站内容更新: 如果用户每次访问我们的网站看到的内容都是一样的,在最初的新鲜劲过去以后估计就再也不想访问我们的网站了o(╯□╰)o,那么如何去更新网站的内容呢? 当有内容,图片,或者界面需要更新是,直接修改.html文件

IOS常见语法解惑

由于工作过程中经常需要查看IOS的Objective-C代码,遂把一些常见的.有疑问的OC语法列出,方便之后会看,提升效率. Objective-C中的@语法 @interface告诉编译器,我要声明一个新类,包含了类的属性和方法,以@end结尾: @implementation告诉编译器,这是某个类的具体实现,以@end结尾: @property是声明属性的语法,它可以快速方便的为类的成员变量创建存取器,并允许我们通过点语法使用存取器,@property等同于在.h文件中声明实例变量的get/

Markdown 常见语法记录

Markdown 是一种轻量级标记语言,它允许人们使用易读易写的纯文本格式编写文档,然后转换成格式丰富的HTML页面. 简单的来说,Markdown就是用"标记符号"表示"格式".Markdown语法标签与HTML语法标签是一一对应的,比如Markdown的二级标题标签##就对应着HTML中的< h2>-< /h2>标记,而且Markdown是兼容HTML语法的,如果你比较喜欢 HTML 的< a >或 < img >

Atitit.jdk&#160;java8的语法特性详解&#160;attilax&#160;总结

Atitit.jdk java8的语法特性详解 attilax 总结 1.1. 类型推断这个特别有趣的.鲜为人知的特性1 2. Lambda1 2.1. 内部迭代意味着改由Java类库来进行迭代,而不是客户代码.例如:1 2.2. Stream 流失接口 管道(pipelines)模式2 2.3. 方法引用(Method reference)2 2.4.  默认方法(Default method)2 2.5. 生成器函数(Generator function)2 2.6. 新加入的Nashorn