Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >简单的C语法问题

简单的C语法问题
EN

Stack Overflow用户
提问于 2011-09-10 09:18:32
回答 3查看 243关注 0票数 1

我在我正在学习的C课程的一次旧考试中遇到了以下代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
struct QuestionSet{
    char q1:1;
    char q2:1;
    char q3:1;
}

我不知道"char q1:1“的语法是什么意思,我在教程”C编程语言“中也找不到它。有谁能解释一下吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-09-10 09:21:25

这是个bitfield。冒号后面的数字指示要分配给结构元素的位数。因此,这三个元素都是一位宽的,并且能够存储两个值: 0和1或-1 (这取决于您的编译器,但在考虑二的补码运算时,-1可能是更合理的选择)。

票数 6
EN

Stack Overflow用户

发布于 2011-09-10 11:08:00

位字段通常用于微控制器编程,因为它有助于映射内存中的寄存器。例如,对于8位寄存器,如果每个位具有不同的含义/用法,则可以用以下结构表示寄存器值:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
struct exception_register
{
    bool enable_irq_0: 1;
    bool enable_irq_1: 1;
    bool enable_irq_2: 1;
    bool enable_irq_3: 1;
    bool irq_flag_0: 1;
    bool irq_flag_1: 1;
    bool irq_flag_2: 1;
    bool irq_flag_3: 1;
};

byte* the_register = 0x1234; // where 0x1234 is the address of the register in memory.

然后可以像这样启用exceptions 2:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
the_register->enable_irq_2 = true;

它比以下代码更具可读性:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
*the_register |= (1 << 2);

这并不是为了回答这个问题,而是为了帮助理解为什么位域可以是help。

票数 1
EN

Stack Overflow用户

发布于 2011-09-10 10:09:36

它看起来像是一个位字段。Example Bitfield

Bitfield在内存较小的情况下可能很有用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7370792

复制
相关文章
简单的通过demo了解C++的基础语法笔记
许久未碰C++的相关内容,已经有些被大脑的程序执行Lru算法了,导致近期在做NDK开发的时候,各种操作卡顿,决心还是回忆整理一下相关的基础知识。
包子388321
2020/06/16
4160
简单的语法知识
2 定义变量给变量赋值 declare @myval int; set @myval = 10; set @myval1 = @myval2*12; --下面语句是在查询中赋值变量 select @myval = max(id)+1 form mytable
liulun
2022/05/08
2190
模板语法的简单实现
模板语法允许在HTML中之插入Js变量以及表达式,当在Js中控制render的时候能够自动在页面上将变量或者是表达式进行计算并显示,比较常见的模板语法有mustcache风格的{{}}以及DSL风格的dsl-html等。
WindRunnerMax
2020/08/27
9430
C++简单实现八皇后问题
近来无聊,想着几年前用c#实现的八皇后,是参考网上的答案,如今过了几年,想试试有没进步,用c++简单地实现。 八皇后问题,是回溯算法的经典例子,它的规则要求是同一行同一列同一条斜线不能有两个皇后,不然会相互攻击。这条件听上去不难吧,可运算量却是惊人的多啊。 首先,程序是算法加数据结构,我这程序的数据结构是一个8*8的整型矩阵chessboard,全部初始化为0,这作为棋盘,每一格若为0则代表可以放棋子,另外还有一个长度为8的整型数组path,记录一次成功的排列,path[i]代表第i行棋子的位置。 然后,本
forrestlin
2018/05/23
7150
python简单语法2
如果(): 执行什么 否则(): 做什么 # 如果(今天不下雨): 大家一起去操场坝打篮球 如果(今天天气热): 邀请同学们一起去游泳馆游泳 否则: 大家还是安静的做个美男子来课堂上听课吧! 语法 if(条件表达式): 代码块 else: 代码块 # 案例: answer=input("请问一下今天的天气怎么样") if(answer=='今天不下雨'): print("大家一起去操场坝打篮球") if(answer=='今天天气热'): print("邀请同学们一起去游泳馆游泳") else: print
py3study
2020/01/09
4000
C语言编程语法—语法风格
在一个标准的C语言程序中,最特殊的莫过于main函数了,而说到底它就是一个函数而已,仅仅因为它地位特殊拥有第一执行权力,换句话说,难道因为一个人是省长它就不是人类了?所以函数该有的它都应该有,那么函数还有什么呢?
芯动大师
2023/10/14
1770
shell语法简单介绍
一、基本的语法 1.1、shell文件开头 shell文件必须以以下的行開始(必须方在文件的第一行): #!/bin/sh 符号#!用来告诉系统它后面的參数是用来运行该文件的程序。在这个样例中我们使用/bin/sh来运行程序。 当编辑好脚本时,假设要运行该脚本,还必须使其可运行。 要使脚本可运行: 执行chmod +x filename 这样才干用./filename 来执行 1.2 凝视 在进行shell编程时,以#开头的句子表示凝视,直到这一行的结束。我们真诚地建议您在程序中使用凝视。 假设您使用了凝视,那么即使相当长的时间内没有使用该脚本,您也能在非常短的时间内明确该脚本的作用 及工作原理。 1.3 变量 在shell编程中,全部的变量都由字符串组成,而且您不须要对变量进行声明,直接赋值就能够,应用变量的话,用$+变量名的形式。
全栈程序员站长
2022/07/13
6040
C++语法
1. 调用父类方法: Class Father { public: void func(); }; Class Child { public: void func(); }; int main() { Child chd; chd.Father::func(); }
用户1396155
2018/08/02
4170
c语法进阶
不管是基本数据类型还是结构体,c都是值传递,和java不同的是,java基本数据类型是值传递,对象是引用传递。所以在c当中一般都是指针传递
曾大稳
2018/09/11
4450
c语法进阶
语法基础-C#基础语法(2)
开发工程中:f1可以查看文档 命名空间不允许以数字开头,所以我们创建好之后,会默认在前面加_,系统加的 int a; 整数 2的10,取值范围:正负20多亿 double a; 小数 精度 17位到18位 char a; 字符型,只能存储一个字符,并且这个字符必须用单引号包住 string 类型:字符串,可以由0个或者多个字符链接起来。 decimal: 存储金钱,精度高。28位到29位。因为钱比较敏感 decimal money; money = 1000; money = 1000.25m;// 如果是double,那么必须后面加符号m/M
孙寅
2020/06/02
1K0
语法基础-C#基础语法(2)
C语言的基本语法单位
1. 基本符号 按照C99的规定,C语言的基本符号集包括: (1) 26个大写字母 (2) 26个小写字母 (3) 10个数字字符 (4) 29个图形字符:! " # % & ' ( ) * + ,
pigeon
2022/04/11
8040
Markdown的语法介绍+Typora的简单使用
Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式。
忆想不到的晖
2020/07/15
3.4K0
Markdown的语法介绍+Typora的简单使用
【C++】C++基础语法
     当我们协同完成一个项目时,你定义的变量会不会与其他人定义的变量名冲突???
The sky
2023/04/12
1.4K0
【C++】C++基础语法
C++基本语法
&在c++中的一种作用为取出当前变量在内存的逻辑地址 *在c++中的一种作用为取出当前逻辑地址对应的内存空间的值 c++中提供指针变量存储对象的地址,指针的运算会被编译器优化为地址的运算,比如一个int类型的指针 p+1的值实际是p指向的地址+1个int所占空间大小后的逻辑地址 指针语法为 typename * variable,比如
歪歪梯
2020/08/17
1K0
c# 基础语法
大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。 c# 基础语法 基础语法 第一个程序 using System; namespace ConsoleApp1 { class Program { static void Main(string[] args) { Console.WriteLine("Hello World"); } } 数据类型 类型 描述 范围 默认值 bool 布尔值 Tru
全栈程序员站长
2022/07/13
5830
C++基础语法
包含了一个iostream的文件头。头文件作为一种包含功能函数、数据接口声明的载体文件,通常编译器通过头文件找到对应的函数库,把引用的函数实际内容导出来。
全栈程序员站长
2022/07/13
9400
C#语法糖
计算机语言中添加某种语法,这种语法对语言的功能没有影响,但是方便程序员使用。使用语法糖增加代码的可读性,减少程序代码出错的机会。 一.自动属性 以前:手写私有变量+公有属性 现在:声明空属性,编译器自动生成对应私有成员字段。 写法:输入prop ,连续按两次tab键,自动生成属性。 二.隐式类型(var) var定义变量有一下四个特点: 1、必须在定义时初始化 2、一旦初始化完成,就不能再给变量赋与初始值不同类型的值了 3、var要求是局部变量 4、使用var定义变量和object不同,它在效率上和使用强类型方式定义变量完全一样 三.参数默认值和命名参数 C#方法的可选参数是.net 4.0最新提出的新的功能,对应简单的重载可以使用可选参数和命名参数混合的形式来定义方法,这样就可以很高效的提高代码的运行效率 设计一个方法的参数时,可以部分或全部参数分配默认值。调用其方法时,可以重新指定分配了默认值的参数,也可以使用默认值。重新指定分配默认值的参数时,可以显式地为指定参数名称赋值;隐式指定的时候,是根据方法参数的顺序,靠C#编译器的推断。 四、对象初始化器和集合初始化器 五、匿名类和匿名方法 有时候你定义的类只是用来封装一些相关的数据,但并不需要相关联的方法、事件和其他自定义的功能。 现在定义一个匿名对象来表示一个人
祝你万事顺利
2019/07/15
7490
C#基本语法
C#使用using用来引入库文件,类似于Java的import以及C++的using namespace语句。同样C#也使用namespace来声明一个命名空间。
zy010101
2019/05/25
8090
c++基础语法
注意:在开发过程中,cpp或者c会被编译为dll或者so供其调用者使用,一般把public的函数定义到h文件,不然调用者都不知道有哪些函数。
曾大稳
2018/09/11
1.5K0
C#语法——委托,架构的血液
微软用delegate关键字来声明委托,delegate与int,string,double等关键字一样。都是声明用的。
Kiba518
2018/08/23
5240

相似问题

简单编程- Objective C语法问题

32

关于C++常量语法的简单问题

70

关于冒号的简单C++语法问题

81

简单的C#“新”问题-相关的语法

74

C#字符串-简单的语法问题

41
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文