c语言中位字段与结构联合的组合使用详解
举例:
===================================================
代码如下:
/** INITRM - Initialization of internal ram position register; 0x0000 0010 **/
typedef union {
byte Byte;
struct {
byte RAMHAL :1;
byte :1;
byte :1;
byte RAM11 :1;
byte RAM12 :1;
byte RAM13 :1;
byte RAM14 :1;
byte RAM15 :1;
} Bits;
struct {
byte :1;
byte :1;
byte :1;
byte grpRAM_11 :5;
}MergedBits;
} INITRMSTR;
那么赋值方式就有三种,比如直接给INITRMSTR赋值
INITRMSTR = 0xEF;
也可以位字段赋值
INITRMSTR.Bits.RAM15 = 1;
也可以多位的位字段赋值
INITRMSTR.MergedBits.grpRAM_11 = 26
(26是十进制,转换成二进制是11010, 直接表示 RAM_11 = 0, RAM_12 = 1, RAM_13 = 0, RAM_14 = 1, RAM_15 = 1)
需要注意的是,在二进制中顺序是从右向左,在这个结构体中是从上向下.
相关推荐
-
c语言中位字段与结构联合的组合使用详解
举例:=================================================== 复制代码 代码如下: /** INITRM - Initialization of internal ram position register; 0x0000 0010 **/ typedef union { byte Byte; struct { byte RAMHAL :1; byte :1; byte :1; byte RAM11 :1; byte RAM12 :1; byte
-
解析C语言中位字段内存分配的问题
C语言的位字段是个比较有意思的特性.它的目的是在一个机器字中保存多个对象(每个对象占据若干bit),从而节省内存资源,同时又避免复杂的位运算.在此不再讨论位字段的具体语法,下面将研究位字段的存储特性. 先说含有多个字段(field)的字(word)所占空间的规律--含有多个字段的字的大小是所有字段的类型中的最长的那个的倍数.但要确定究竟是最长类型的几倍则比较复杂,这要看是否需要考虑类型对齐问题(即一个字段能否跨越两个最长类型). 例1: struct word {char field1 : 1
-
C语言中字符串实现正序与逆序实例详解
C语言中字符串实现逆序实例详解 字符串逆序和正序的实现代码: #include <stdio.h> #include <stdlib.h> #include <conio.h> #include <malloc.h> #include <string.h> /*定义*/ typedef struct node { char c; struct node *llink,*rlink; }stud; /*建立链表*/ stud * creat(voi
-
C语言中输入函数(scanf()、fgets()和gets())的区别详解
前言 大家都知道在C语言中,有三种主要的输入函数:scanf(),fgets()以及gets().他们的使用方法及注意事项如下: 1.scanf() 它是一种格式化的输入方式,可一次性按照规定的格式输入多个数据域. scanf函数是一个标准库函数,它的函数原型在头文件"stdio.h"中.与printf函数相同,C语言也允许在使用scanf函数之前不必包含stdio.h文件. scanf函数的一般形式为: scanf("格式控制字符串", 地址表列); 其中,格式控
-
C语言中使用快速排序算法对元素排序的实例详解
调用C语言的快速排序算法qsort(); #include<stdio.h> #include<stdlib.h> #include<string.h> #define SIZE 100 //从小到大排序 int comp1(const void *x,const void *y) { return *(int *)x - *(int *)y; } //从大到小排序 int comp2(const void *x,const void *y) { return *(in
-
一文带你了解Go语言中的指针和结构体
目录 前言 指针 指针的定义 获取和修改指针所指向变量的值 结构体 结构体定义 结构体的创建方式 小结 前言 前面的两篇文章对 Go 语言的基础语法和基本数据类型以及几个复合数据类型进行介绍,本文将对 Go 里面的指针和结构体进行介绍,也为后续文章做铺垫. 指针 在 Go 语言中,指针可以简单理解是一个地址,指针类型是依托于某一个类型而存在的,例如 Go 里面的基本数据类型 int.float64.string 等,它们所对应的指针类型为 *int.*float64.*string等. 指针的定
-
谈谈C语言中位运算你要知道的那些事儿
目录 一.概念说明 1.概念 1.1位运算 1.2位运算符 2.举例及补充 2.1位运算 2.2位运算符 二.问题实战 1.问题描述(开放题) 2.输入输出 三.源码实现(+详细注释) 1.注释版 2.纯源码版 四.输出结果展示 1.输出结果 总结 一.概念说明 1.概念 先来看一下位运算的概念: 1.1位运算 位运算简单来说,就是按二进制位进行运算. 位运算: 从现代计算机中所有的数据二进制的形式存储在设备中.即 0.1 两种状态,计算机对二进制数据进行的运算(+.-.*./)都是叫位运算,即
-
C语言程序中结构体的内存对齐详解
目录 一.为什么存在内存对齐 二.结构体的内存对齐四规则 三.举例 一.为什么存在内存对齐 1.平台原因(移植原因): 不是所有的硬件平台都能访问任意地址上的任意数据的:某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常. 2. 性能原因: 数据结构(尤其是栈)应该尽可能地在自然边界上对齐. 原因在于,为了访问未对齐的内存,处理器需要作两次内存访问:而对齐的内存访问仅需要一次访问. 总的来说结构体的内存对齐是拿空间来换取时间的做法. 二.结构体的内存对齐四规则 默认情况:默认的对
-
C语言 联合(union)用法案例详解
联合(union)的声明和结构与结构体类似,但是本质不同. 联合的所有成员引用的是内存中的相同位置.当你想在不同时刻把不同的东西存储于同一位置时,就可以使用联合. 构体(struct)中所有变量是"共存"的--优点是"有容乃大",全面:缺点是struct内存空间的分配是粗放的,不管用不用,全分配. 而联合体(union)中是各变量是"互斥"的--缺点就是不够"包容":但优点是内存使用更为精细灵活,也节省了内存空间
-
Go语言学习之结构体和方法使用详解
目录 1. 结构体别名定义 2. 工厂模式 3. Tag 原信息 4. 匿名字段 5. 方法 1. 结构体别名定义 变量别名定义 package main import "fmt" type integer int func main() { //类型别名定义 var i integer = 1000 fmt.Printf("值: %d, 类型: %T\n", i, i) var j int = 100 j = int(i) //j和i不属于同一类型,需要转换 fm
随机推荐
- jQuery.Validate表单验证插件的使用示例详解
- java几种排序算法的实现及简单分析
- 关于iOS中的各种颜色设置总结大全(推荐)
- IOS开发之tableView点击行跳转并带有“显示”更多功能
- 新浪SAE云平台下使用codeigniter的数据库配置
- windows消息和消息队列实例详解
- 用js代码和插件实现wordpress雪花飘落效果的四种方法
- Android下拉刷新PtrFrameLayout的使用实例代码
- C++基础入门教程(七):一些比较特别的基础语法总结
- 举例讲解C语言对归并排序算法的基础使用
- JavaScript学习小结(7)之JS RegExp
- 服务器安全设置之 服务器安全和性能配置
- apache日志配置一例
- 基于linux与windows平台下 如何下载android sdk源代码的方法详解
- php Notice: Undefined index 错误提示解决方法
- 利用vue+elementUI实现部分引入组件的方法详解
- iOS NSTimer循环引用的办法
- .NET Corek中Git的常用命令及实战演练
- Python 字符串类型列表转换成真正列表类型过程解析
- JavaWeb实现简单查询商品功能