广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >Linux C语言有没有bit
  • 215
分享到

Linux C语言有没有bit

2023-07-05 17:07:04 215人浏览 独家记忆
摘要

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

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

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   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->a=0;  PBit->b&=3;  PBit->c|=1;  printf("%d,%d,%d\n",PBit->a,PBit->b,PBit->c); }

  上例程序中定义了位域结构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”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网其他教程频道。

--结束END--

本文标题: Linux C语言有没有bit

本文链接: https://www.lsjlt.com/news/353781.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Linux C语言有没有bit
    本文小编为大家详细介绍“Linux C语言有没有bit”,内容详细,步骤清晰,细节处理妥当,希望这篇“Linux C语言有没有bit”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。Linux C语言有bit;在单片...
    99+
    2023-07-05
  • c语言本身有没有输入输出语句
    本教程操作环境:windows7系统、c99版本、Dell G3电脑。c语言本身是没有输入输出语句的。C语言本身并不提供输入和输出语句,输入和输出的操作是由函数来实现的,对文件的读写也都是用库函数来实现的。C语言的标准函数库中提供了一些输入...
    99+
    2022-11-24
    C语言
  • go语言有没有gc
    这篇文章主要介绍“go语言有没有gc”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“go语言有没有gc”文章能帮助大家解决问题。go语言有gc。GC是指垃圾回收,是一种自动内存管理的机制;go语言支持...
    99+
    2023-07-04
  • go语言有没有while
    go语言中没有while关键字,不支持while和do-while循环结构。从功能上讲,但凡while语句能做的事情,for语句也可以实现,因此Go语言统一了for语句和while语句。且Go的开发团队有比较严重的洁癖,while并不是一个...
    99+
    2023-05-14
    go语言
  • C语言为什么没有引用只有指针
    本篇内容主要讲解“C语言为什么没有引用只有指针”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言为什么没有引用只有指针”吧!什么是引用呢说白了引用&就是给已经存在的某个变量新建了一个名...
    99+
    2023-06-16
  • c语言中怎么定义bit函数
    在C语言中,可以使用位域(bit-field)来定义一个函数。位域是一种特殊的结构体成员,可以指定成员占用的位数。 下面是一个例子,...
    99+
    2023-10-23
    c语言
  • c语言中bit的用法是什么
    在C语言中,bit是计算机中的最小存储单位,它代表了二进制的0或1。C语言中的bit操作主要用于对二进制位进行位操作,如位与、位或、...
    99+
    2023-08-19
    c语言
  • go语言有没有反射
    这篇文章主要讲解了“go语言有没有反射”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“go语言有没有反射”吧!go语言有反射。Go语言提供了一种机制在运行时更新和检查变量的值、调用变量的方法和...
    99+
    2023-07-04
  • go语言有没有缩进
    go语言有缩进。在go语言中,缩进直接使用gofmt工具格式化即可(gofmt使用tab进行缩进);gofmt工具会以标准样式的缩进和垂直对齐方式对源代码进行格式化,甚至必要情况下注释也会重新格式化。本教程操作环境:windows7系统、G...
    99+
    2023-05-14
    go语言 Golang Go
  • go语言有没有分号
    本篇内容主要讲解“go语言有没有分号”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“go语言有没有分号”吧!go语言中没有分号,go方法是由一条一条语句构成,每个语句后面是不需要分号的;go又称G...
    99+
    2023-07-05
  • go语言有没有可调用库
    go语言有可调用库,分别是:1、Go Modules,是Go语言的依赖管理工具;2、net/http,是Go语言标准库中用于处理HTTP请求和响应的模块;3、sqlx,是一个被广泛使用的数据库连接库;4、goroutine,是强大简单的并发...
    99+
    2023-07-17
  • go语言有没有构造函数
    这篇文章主要介绍“go语言有没有构造函数”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“go语言有没有构造函数”文章能帮助大家解决问题。go语言没有构造函数。go语言作为结构化的语言是没有面向对象语言...
    99+
    2023-07-05
  • go语言中有没有set集合
    这篇文章将为大家详细讲解有关go语言中有没有set集合,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。go语言没有set集合。Set是一个集合,set里的元素不能重复;golang的标准库中没有对set的操...
    99+
    2023-06-15
  • C语言非void函数却没有return会有什么影响
    本文小编为大家详细介绍“C语言非void函数却没有return会有什么影响”,内容详细,步骤清晰,细节处理妥当,希望这篇“C语言非void函数却没有return会有什么影响”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知...
    99+
    2023-07-05
  • javascript语言中有没有函数重载
    这篇文章将为大家详细讲解有关javascript语言中有没有函数重载,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 javascript没有函...
    99+
    2022-10-19
  • 有没有公司开始用go语言
    有。使用Go语言的公司有:Google、Facebook、腾讯、七牛云、京东、小米、360、美团、滴滴、新浪、搜狗等。google作为创造了Go语言的公司,有很多基于Go开发的开源项目,比如kubernets,docker。京东云消息推送系...
    99+
    2023-05-14
    go语言 Golang
  • go语言中有没有字符类型
    这篇文章将为大家详细讲解有关go语言中有没有字符类型,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Go语言的字符类型有以下两种:一种是 uint8 类型,或者叫 byte 型,代表了 ASC...
    99+
    2023-06-15
  • c语言项目没有调试信息怎么解决
    如果在C语言项目中没有调试信息,可以尝试以下解决方法:1. 检查编译选项:在编译时,确保使用了正确的编译选项。常用的编译选项如下:-...
    99+
    2023-10-12
    c语言
  • Go语言有没有队列和栈结构
    这篇文章主要介绍“Go语言有没有队列和栈结构”,在日常操作中,相信很多人在Go语言有没有队列和栈结构问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Go语言有没有队列和栈结构”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-07-04
  • 为什么VB.NET模块在C#等语言中是没有的
    小编给大家分享一下为什么VB.NET模块在C#等语言中是没有的,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!首先,这是一个历史原因。早先的VB语言都有模块和类模块...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作