下载此文档

C语言段位操作知识整理.docx


文档分类:IT计算机 | 页数:约6页 举报非法文档有奖
1/6
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/6 下载此文档
文档列表 文档介绍
该【C语言段位操作知识整理 】是由【B小yi】上传分享,文档一共【6】页,该文档可以免费在线阅读,需要了解更多关于【C语言段位操作知识整理 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。本文格式为Word版,下载可任意编辑
—2—
C语言段位操作知识整理
C语言段位操作学识整理
C语言的应用范围广泛,具备很强的数据处理才能,不仅仅是在软件开发上,而且各类科研都需要用到C语言,适于编写系统软件,三维,二维图形和动画,概括应用譬如单片机以及嵌入式系统开发。今天,我为大家探寻整理了C语言段位操作学识整理,梦想大家能有所收获,更多精彩内容请持续关注我们我!
:
unsigned成员名:二进制位数
例如:
structbytedata
unsigneda:2;/*位段a,占2位*/
unsigned:6;/*无名位段,占6位,但不能访问*/
unsigned:0;/*无名位段,占0位,表下一位段从下一字边界开头*/
unsignedb:10;/*位段b,占10位*/
inti;/*成员i,从下一字边界开头*/
data;
2.
1一个位段务必存储在同一存储单元即字之中,不能跨两个单元。假设其单元空间不够,那么剩余空间不用,从下一个单元起存放该位段。
本文格式为Word版,下载可任意编辑
—3—
2可以通过定义长度为0的位段的方式使下一位段从下一存储单元开头。
3可以定义无名位段。
4位段的长度不能大于存储单元的长度。
5位段无地址,不能对位段举行取地址运算。
6位段可以以%d,%o,%x格式输出。
7位段若展现在表达式中,将被系统自动转换成整数。
拷贝2:C语言中的布局是有实现位段的才能的,噢!你问它毕竟是什么形式是吧?这个问题呆会给你答案。让我们先看看位段的作用:位段是在字段的声明后面加一个冒号以及一个表示字段位长的整数来实现的。这种用法又被就叫作"深入规律元件的编程',假设你对系统编程感兴趣,那么这篇文章你就不理应错过!
我把使用位段的几个理由报告大家:1、它能把长度为奇数的数据包装在一起,从而节省存储的空间;2、它可以很便当地访问一个整型值的片面内容。
首先我要指点大家留神几点:1、位段成员只有三种类型:int,unsignedint和signedint这三种当然了,int型位段是不是可以取负数不是我说了算的,由于这是和你的'编译器来抉择的。位段,位段,它是用来表示字段位长bit的,它只有整型值,,假设你说有,,当然也没有char这个类型的;2、成员名后面的一个冒号和一个整数,这个整数指定该位段的位长bit;3、大量编译器把位段成员的字长限制在一个int的长度范围之内;4、位段成员在内存的实现是从左到右还是从右到左是由编译器来抉择的,但二者皆对。
本文格式为Word版,下载可任意编辑
—3—
下面我们就来看看,它毕竟是什么东西我先假定大家的机器字长为32位:
StructWORD
unsignedintchara:6:
unsignedintfont:7;
unsignedintmaxsize:19;
;
StructWORDchone;
这一段是从我编写的一个文字格式化软件摘下来的,它最多可以容纳64既我说的unsignedintchara:6;它总共是6位个不同的字符值,可以处理128既unsignedintfont:7;既2的7次方种不同的字体,和2的19次方的单位长度的字。大家都可以看到maxsize是19位,它是无法被一个shortint类型的值所容纳的,我们又可以看到其余的成员的长度比char还小,这就让我们想起让他们共享32位机器字长,这就制止用一个32位的整数来表示maxsize的位段。怎么样?还要留神的是方才的那一段代码在16位字长的机器上是无法实现的,为什么?指点你一下,看看上面指点的第3点,你会明白的!
本文格式为Word版,下载可任意编辑
—4—
你是不是察觉这个东西没有用啊?假设你点头了,那你就错了!这么宏伟的创造怎么会没有用呢你对系统编程不感兴趣,相信你会变更这么一个观点的?磁盘操纵器大家理应知道吧?软驱与它的通信我们来看看是怎么实现的下面是一个磁盘操纵器的寄放器:
│5│5│9│8│1│1∣1∣1∣1∣
上面位段从左到右依次代表的含义为:5位的命令,5位的扇区,9位的磁道,8位的错误代码,1位的HEADLOADED,1位的写养护,1位的DISKSPINNING,1位的错误判断符,还有1位的READY位。它要怎么来实现呢?你先自己写写看:
structDISK_FORMAT
unsignedintcommand:5;
unsignedsector:5;
unsignedtrack:9;
unsignederr_code:8;
unsignedishead_loaded:1;
unsignediswrit_protect:1;
unsignedisdisk_spinning:1;
unsignediserr_ocur:1;
本文格式为Word版,下载可任意编辑
—5—
undignedisready:1;
;
注:代码中除了第一行使用了unsignedint来声明位段后就省去了int,这是可行的,详见ANCIC标准。
假设我们要对044c18bfH的地址举行访问的话,那就这样:
#defineDISKstructDISK_FORMAT*0x044c18bf
DISK-sector=fst_sector;
DISK-track=fst_track;
DISK-command=WRITE;
当然那些都是要宏定义的哦!
我们用位段来实现这一目的是很便当的,其实这也可以用移位或屏蔽来实现,你尝试过就知道哪个更便当了!
测试代码:
#include
intmain
struct
unsignedshorts1:4;
unsignedshorts2:3;
unsignedshorts3:2;
x;
charc=0x7A;//01111010b
本文格式为Word版,下载可任意编辑
—6—
=c;
printf%x/n,;
return0;
根据编译器的不同,可能展现大端和小端的问题,小端就是从低位开头取值,大端就是从高位取值。
常见为小端模式。

C语言段位操作知识整理 来自淘豆网www.taodocs.com转载请标明出处.

非法内容举报中心
文档信息
  • 页数6
  • 收藏数0 收藏
  • 顶次数0
  • 上传人B小yi
  • 文件大小18 KB
  • 时间2023-05-02