在线精品99_中国九九盗摄偷拍偷看_91免费版在线观看_91.app_91高清视频在线_99热最新网站

Linux C语言有没有bit

169次阅读
没有评论

共计 2064 个字符,预计需要花费 6 分钟才能阅读完成。

本文丸趣 TV 小编为大家详细介绍“Linux C 语言有没有 bit”,内容详细,步骤清晰,细节处理妥当,希望这篇“Linux C 语言有没有 bit”文章能帮助大家解决疑惑,下面跟着丸趣 TV 小编的思路慢慢深入,一起来学习新知识吧。

Linux C 语言有 bit;在单片机 C 语言中,bit 是新增的一个关键词,常用来定义一个“位变量”;C 语言定义 bit 型数据的方法是:1、通过 sbit 或者 bit 定义;2、通过位域(结构体中)定义;3、通过组合位运算符定义。

C 语言定义 bit 型数据:

一、通过 sbit 或者 bit 定义

sbit 映射到 IO 口(P1^1 这种 IO 口的“位”)

bit 在 RAM 中的可位寻址空间中,一般用作程序判断的标志位。

认为它们一个对外(sbit),一个对内 (bit)。

在单片机 C 语言中,bit 是新增的一个关键词, 常用来定义一个“位变量”

二、通过位域(结构体中)定义

位域的定义和位域变量的说明位域定义与结构定义相仿,其形式为:

struct 位域结构名

{位域列表};

其中位域列表的形式为:类型说明符 位域名:位域长度

例如:

struct bs 
{ 
 int a:8; 
 int b:2; 
 int c:6; 
};

位域变量的说明与结构变量说明的方式相同。可采用先定义后说明,同时定义说明或者直接说明这三种方式。例如:

struct bs 
{ 
 int a:8; 
 int b:2; 
 int c:6; 
}data;

说明 data 为 bs 变量,共占两个字节。其中位域 a 占 8 位,位域 b 占 2 位,位域 c 占 6 位。对于位域的定义尚有以下几点说明:

1. 一个位域必须存储在同一个字节中,不能跨两个字节。如一个字节所剩空间不够存放另一位域时,应从下一单元起存放该位域。也可以有意使某位域从下一单元开始。例如:

struct bs 
{ 
 unsigned a:4 
 unsigned :0 /* 空域 */ 
 unsigned b:4 /* 从下一单元开始存放 */ 
 unsigned c:4 
}

在这个位域定义中,a 占第一字节的 4 位,后 4 位填 0 表示不使用,b 从第二字节开始,占用 4 位,c 占用 4 位。

2. 由于位域不允许跨两个字节,因此位域的长度不能大于一个字节的长度,也就是说不能超过 8 位二进位。

3. 位域可以无位域名,这时它只用来作填充或调整位置。无名的位域是不能使用的。例如:

struct k 
{ 
 int a:1 
 int :2 /* 该 2 位不能使用 */ 
 int b:3 
 int c:2 
};

从以上分析可以看出,位域在本质上就是一种结构类型,不过其成员是按二进位分配的。

二、位域的使用

位域的使用和结构成员的使用相同,其一般形式为:位域变量名?位域名 位域允许用各种格式输出。

main(){ 
 struct bs 
 { 
 unsigned a:1; 
 unsigned b:3; 
 unsigned c:4; 
 } bit,*PBit; 
 bit.a=1; 
 bit.b=7; 
 bit.c=15; 
 printf(%d,%d,%d\n ,bit.a,bit.b,bit.c); 
 PBit= bit; 
 PBit-  
 PBit- b  
 PBit- c|=1; 
 printf(%d,%d,%d\n ,PBit- a,PBit- b,PBit-  }

上例程序中定义了位域结构 bs,三个位域为 a,b,c。说明了 bs 类型的变量 bit 和指向 bs 类型的指针变量 PBit。这表示位域也是可以使用指针的。

程序的 9、10、11 三行分别给三个位域赋值。(应注意赋值不能超过该位域的允许范围) 程序第 12 行以整型量格式输出三个域的内容。第 13 行把位域变量 bit 的地址送给指针变量 PBit。第 14 行用指针方式给位域 a 重新赋值,赋为 0。第 15 行使用了复合的位运算符 =,该行相当于:PBit- b=PBit- b 3 位域 b 中原有值为 7,与 3 作按位与运算的结果为 3(111 011=011, 十进制值为 3)。同样,程序第 16 行中使用了复合位运算 |=,相当于:PBit- c=PBit- c| 1 其结果为 15。程序第 17 行用指针方式输出了这三个域的值。

使用位域的主要目的是压缩存储,其大致规则为:

1)   如果相邻位域字段的类型相同,且其位宽之和小于类型的 sizeof 大小,则后面的字段将紧邻前一个字段存储,直到不能容纳为止;

2)   如果相邻位域字段的类型相同,但其位宽之和大于类型的 sizeof 大小,则后面的字段将从新的存储单元开始,其偏移量为其类型大小的整数倍;

3)   如果位域字段之间穿插着非位域字段,则不进行压缩;

4)   整个结构体的总大小为最宽基本类型成员大小的整数倍。

三、通过通过组合 位运算符 来操作

#define Setbit(x,y) (x|=(0x01 y)) // 置位
#define Clrbit(x,y) (x =(~(0x01 y))) // 复位(清零)#define Chkbit(x,y) (x (0x01 y))  // 检位 

读到这里,这篇“Linux C 语言有没有 bit”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注丸趣 TV 行业资讯频道。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-12发表,共计2064字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)
主站蜘蛛池模板: 美女张开腿黄网站免费 | 牛牛本精品99久久精品88m | 亚洲ⅴ国产v天堂a无码二区 | 亚洲精品第一区二区三区 | 欧美中文综合在线视频 | 清草在线视频精品 | 一级一片一a一片 | 欧美va天堂 | 久久精品在线免费观看 | 四虎影视最新地址 | 99热这里只有精品99 | 久久国产高潮流白浆免费观看 | 国产精品自在线拍国产电影 | 久久久久亚洲av成人片 | 国产精品自产拍高潮在线观看 | 青青青在线视频国产 | 国产午夜亚洲精品不卡下载 | 欧美天天综合 | 成年美女黄网站色大片免费软件看 | 精品精品国产高清a毛片牛牛 | 亚洲男人的天堂在线播放 | 国产日本欧美高清免费区 | 久久99在线 | 欧美黄成人免费网站大全 | 精品午夜久久影视 | 成人精品一区二区www | 亚洲自拍另类 | 初尝黑人巨砲波多野结衣 | 十八男男在线观看视频 | 精品国产一区二区在线观看 | 国产免费观看久久黄av片 | 成人乱码一区二区三区四区 | 四虎在线电影 | 亚洲av无码一区二区乱子仑 | 国产一区二区在线观看视频 | 一区二区不卡不卡一卡 | 思思99re热 | 就草草在线观看视频 | 久久精品免视着国产成人 | 久久乐国产精品亚洲综合 | 免费一级特黄 欧美大片 |