C语言 段位
C语言允许在一个结构体中以位为单位来指定其成员所占内存长度,这种以位为单位的成员称为“位段”或“位域”
在结构体中位段的定义格式为:
unsignede <成员名>:<二进制位数>;
例如:
struct bytedata{
unsigned a:; /*位段a,占2位*/
unsigned b:; /*位段b,占6位*/
}data;
引用结构体的位段成员同引用结构体其他类型成员一样,但应注意位段的最大取值范围不要超出二进制位数限制的范围,否则超出部分会丢失。
例如:
data.a = 2; /*正确*/
data.b = 10;/*错误,超出范围(a占2位,能容纳的最大值为3)*/
关于位段,还需要注意以下几点:
(1)位段成员的数据类型必须是unsigned.
(2)可以定义长度为0的位段。这使下一位段从下一存储单元(一个存储单元一般是两个字节)开始。例如:
struct bytedata{
unsigned a:;
unsigned b:;
unsigned:;
unsigned c:;
};
本来a、b、c应连续存放在一个存储单元中,但由于用长度0的位段将b、c隔开,现只能将a、b存放在一个存储单元中,而c另存放在下一个单元中
(3)位段不能跨单元存储,如果上一单元的剩余空间不够存储新的位段,则跳过此剩余空间,将该位段存放在下一个单元中
(4)可以定义无名位段,但其空间不能使用。
struct bytedata{
unsigned a:;
unsigned:; /*无名位段,占2位,不能使用*/
unsigned c:;
};
(5)一个位段的长度不能大于一个存储单元的长度。
(6)不能定义位段数组。
(7)位段可以以%d、%u、%o、%x等格式输出。
(8)位段若出现在表达式中,将被系统自动转换成整型数。
位段排序:
先定义先排序
C语言 段位的更多相关文章
- 20155324王鸣宇对C语言课程回顾及对Java的展望
# 第二次预备作业 你有什么技能比大多人(超过90%以上)更好? 针对这个技能的获取你有什么成功的经验? 与老师博客中的学习经验有什么共通之处? 我谦虚的说整个2015级五系英雄联盟这个游戏我最厉害( ...
- keil C语言与汇编语言混合编程
C与汇编混合编程主要有以下几种:(1)C语言中嵌入汇编(2)无参数传递的函数调用(3)有参数传递的函数调用 一.C语言中嵌入汇编 1.在 C 文件中要嵌入汇编代码片以如下方式加入汇编代码: #prag ...
- 一封来自恶魔的挑战邀请函,那些你见过或者没见过的C语言指针都在这里了
前言 相信大多数的同学都是第一门能接触到语言是C/C++,其中的指针也是比较让人头疼的部分了,因为光是指针都能专门出一本叫<C和指针>的书籍,足见指针的强大.但如果不慎误用指针,这些指针很 ...
- 20165101 学习基础和C语言基础调查
学习基础和C语言基础调查 技能学习心得 看了15级学长学姐丰富的技能之后,我感到很惭愧.我的课外技能可以说是很糟糕.唱歌的话,小时候还可以用假声唱一下,变声之后就是高音上不去,低音下不来.体育更是差劲 ...
- 用 C 语言编写一个简单的垃圾回收器
人们似乎觉得编写垃圾回收机制是非常难的,是一种仅仅有少数智者和Hans Boehm(et al)才干理解的高深魔法.我觉得编写垃圾回收最难的地方就是内存分配,这和阅读K&R所写的malloc例 ...
- C语言 · 高精度加法
问题描述 输入两个整数a和b,输出这两个整数的和.a和b都不超过100位. 算法描述 由于a和b都比较大,所以不能直接使用语言中的标准数据类型来存储.对于这种问题,一般使用数组来处理. 定义一个数组A ...
- Windows server 2012 添加中文语言包(英文转为中文)(离线)
Windows server 2012 添加中文语言包(英文转为中文)(离线) 相关资料: 公司环境:亚马孙aws虚拟机 英文版Windows2012 中文SQL Server2012安装包,需要安装 ...
- iOS开发系列--Swift语言
概述 Swift是苹果2014年推出的全新的编程语言,它继承了C语言.ObjC的特性,且克服了C语言的兼容性问题.Swift发展过程中不仅保留了ObjC很多语法特性,它也借鉴了多种现代化语言的特点,在 ...
- C语言 · Anagrams问题
问题描述 Anagrams指的是具有如下特性的两个单词:在这两个单词当中,每一个英文字母(不区分大小写)所出现的次数都是相同的.例如,"Unclear"和"Nuclear ...
随机推荐
- 4.Nexus按项目类型分配不同的工厂来发布不同的项目
在[3.发布Maven项目到nexus中]配置了把项目发布到nexus中的方法但是有时候,一个公司会有很多项目[crm,oa,erp]等等的项目.如果把这些项目全部都放到releases或者snaps ...
- 剑指offer(07)-调整数组顺序使奇数位于偶数前面【转】
来源:http://www.acmerblog.com/offer-6-2429/ 题目来自剑指offer系列 九度 1516 题目描述: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得 ...
- 【转】用 PHP 内置函数 file_put_contents 写入文件
PHP 内置函数 file_put_contents 用于写入文件. file_put_contents 函数最简单的写法,可以只用两个参数,一个是文件路径,一个是要写入的内容,语法如下: file_ ...
- 搭建EF6.0+MVC4搭建框架遇到的问题及解决方案
问题一:“未能加载文件或程序集“EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089” ...
- datatables的Bootstrap样式的分页怎么添加首页和尾页(引)
找到dataTables.bootstrap.js(版本3):(此项目中文件名为:dataTableExt.js) $.fn.dataTableExt.oApi.fnPagingInfo = func ...
- maven NoClassDefFoundError: org/mortbay/util/Attributes
在运行mvn jetty:run报错: NoClassDefFoundError: org/mortbay/util/Attributes 解决方法: deleted /home/jenkins/.m ...
- selenium+python自动化之操作浏览器
一.打开网站 1.第一步:从selenium里面导入webdriver模块 2.打开Firefox浏览器(Ie和Chrome对应下面的) 3.打开百度网址 二.设置休眠 1.由于打开百度网址后,页面加 ...
- Ruby Exception
begin #可能发生异常的地方 rescue #如何处理异常 end rescue,哈哈,太有爱的一个单词了... begin #可能发生异常的地方 rescue => exception # ...
- 【python】sys.argv[]的用法
在学python的过程中,一直弄不明白sys.argv[]的意思,虽知道是表示命令行参数,但还是有些稀里糊涂的感觉. 今天又好好学习了一把,总算是大彻大悟了. Sys.argv[]是用来获取命令行参数 ...
- 【转】ASP.NET MVC 的最佳实践
[This post is based on a document authored by Ben Grover (a senior developer at Microsoft). It is ou ...