Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >结构中的位是否得到保证?

结构中的位是否得到保证?
EN

Stack Overflow用户
提问于 2019-08-01 03:02:11
回答 1查看 119关注 0票数 3

我有一个关于结构位字段的问题,请看下面,因为我有点不知道应该使用哪些关键字来最好地描述我的问题:

上下文:我正在为MIPS R3000A汇编指令编写反汇编程序,该程序在2000年初用于Playstation程序。

问题:我想知道在这段代码中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
struct Instruction {
    u32 other:26;
    u32 op:6;
};

//main:
Instruction instruction = *(Instruction*)(data + pc);
printf("%02x\n", instruction.op);

它保证所有的编译器,使用小的endianness,将始终使用op:6位字段来存储前6个MSB?(这有点违背直觉,您可以假设最后6位存储在op位字段中)

它是以下代码的替代方案:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
static uint32_t get_op_code(uint32_t data) {
    uint16_t mask = (1 << 6) - 1;
    return (data >> 26) & mask;
}

//main:
uint32_t instruction = *(uint32_t*)(data + pc);
uint32_t op = get_op_code(instruction);
printf("%02x\n", op);

它在我这边工作得很好,使用结构方法似乎要快一些,更不用说更直观和清晰了,但是我恐怕不能保证第一个比特存储在结构的第二个位字段"op“中。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-01 03:07:27

C标准并不保证比特字段的排列方式。它确实需要每个实现来定义它,所以它应该在编译器的文档中。2018年6.7.2.1 11

实现可以分配任何足以容纳位字段的可寻址存储单元。如果有足够的空间,在结构中立即跟随另一个位场的位场应被包装成同一单元的相邻位元。如果空间不足,是否将不适合的位字段放入下一个单元或重叠相邻单元是实现定义的。在一个单元内分配位字段的顺序(高阶到低阶或低阶到高阶)是实现定义的。可寻址存储单元的对齐未指定。

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

https://stackoverflow.com/questions/57307550

复制
相关文章
判断数组中任意数据累加是否可以得到aim
给你一个数组arr,和一个整数aim。 如果可以任意选择arr中的数字,能不能累加得到aim,返回true或者false
名字是乱打的
2022/05/13
3700
JavaScript中的this(保证学会)
虽然this在JavaScript中是一个老生常谈的问题,但实际场景中还是很容易出错。主要原因是this对象在JavaScript中和其他语言相比表现不太一致,而且在不同的运行环境中表现也不一致。今天我们就把浏览器中的this对象彻底聊明白,记清楚。
一行舟
2022/08/25
2560
得到AppStore中App的下载链接
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/51098848
用户1451823
2018/09/13
2K0
域名是否注册查询API,python查询短位域名是否注册
这两天看到有些域名可以过Azure,虽然呢,这玩意我也用不到,但是就想试试域名注册情况(万一以后想查询短位域名啥的呢,是吧)。
SingYi
2022/07/14
29.1K0
域名是否注册查询API,python查询短位域名是否注册
Linux 中的 32 位与 64 位
在通用PC领域,不论是windows还是linux界,我们都会经常听到"32位"与"64位"的说法,类似的还有"x86"与"x86_64","i386"与"amd64",这两组概念之间有着怎样的联系和区别呢?
杰哥的IT之旅
2021/01/06
3.4K0
MySQL中如何得到权限信息
最近在做一次MySQL数据迁移的时候,突然发现自己遗漏了一个地方,那就是权限信息没有导出,如果我们使用mysqldump --all-databases的时候没有添加--flush-privileges的时候,导出的数据中是不会包含mysql数据库的。 而我其实是比较懒的,不想因为这个重新导出一次,那么我就有几种方式选择。 如果在MySQL 5.5,5.6的版本中,我可以直接导出mysql.user的数据即可。 如果使用脚本化完成,基本是这样的形式即可,本意其实就是show gr
jeanron100
2018/03/21
1.9K0
各位相加,直到得到一个一位的整数
从1开始,结果依次是1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9····
你好戴先生
2020/09/01
8230
LeetCode 1752. 检查数组是否经排序和轮转得到
给你一个数组 nums 。 nums 的源数组中,所有元素与 nums 相同,但按非递减顺序排列。
Michael阿明
2021/09/07
4650
silverlight中如何得到ComboBox的选中值(SelectedValue)?
用惯了Asp.Net中的ComboBox和ListBox,想当然的以为SL/Winform/WPF中的ComboBox也应该有类似SelectedValue的属性,但是结果很遗憾,木有! 不过,这个问
菩提树下的杨过
2018/01/23
1.3K0
关于 64 位 PHP 使用 PHP_INT_SIZE 输出得到 4 的问题
很尴尬,为什么phpinfo()中的 PHP 是 64 位,而获取PHP_INT_SIZE的值确是 4
沈唁
2019/01/28
1.4K0
关于 64 位 PHP 使用 PHP_INT_SIZE 输出得到 4 的问题
JS中可能用得到的全部的排序算法
本篇有7k+字, 系统梳理了js中排序算法相关的知识, 希望您能喜欢. 原文:JS中可能用得到的全部的排序算法 导读 排序算法可以称得上是我的盲点, 曾几何时当我知道Chrome的Array.prot
马士兵的朋友圈
2020/09/08
1.7K0
Linux是否能在8位MCU上运行?
我们经常可以看到初学者在单片机论坛中询问他们是否可以在他们微不足道的小的8位微机中运行Linux。这些问题的结果通常是带来笑声。我们也经常看到,在Linux论坛中,询问Linux运行的最低要求是什么。常见的答案是Linux需要一个32位架构和一个MMU(存储器管理单元),并至少1MB的RAM来满足内核的需求。
刘盼
2020/04/01
1.8K0
深入Java中的位操作
在方法中是int值,int占4字节32位,所以是:“%32s” 若是byte将32改成8即可;当然对于byte你还需要加上“&0xFF”来做高位清零操作。
程序猿DD
2019/05/10
9080
深入Java中的位操作
AS3中的位操作
在AS3中位操作是非常快的,这里列出一些可以加快某些计算速度的代码片段集合。我不会解释什么是位运算符,也不会解释怎么使用他们,只能告诉大家如果想清楚其中的原理先认真学一下2进制.
py3study
2020/01/06
4160
一个五位数ABCDE乘以9,得到EDCBA,求此五位数
此题是面试时某面试官突然抛出的,要求逻辑分析推导,不许编码,5分钟时间算出来最终结果,当然,最终没有完全推算出来
BH8ANK
2021/01/28
4280
得到一个物种所有基因的TSS(转录起始位点)区域的bed文件。
首先在UCSC的table browser 里面下载下面这个文件: 可以看到我这里选择的mm10的refseq系统的所有基因,共有29037个不同的tss,36872个转录本,只有24540个基因,说
生信技能树
2018/03/09
3.3K0
得到一个物种所有基因的TSS(转录起始位点)区域的bed文件。
C语言-结构体与位域
C语言里的结构体是可以包含不同数据类型和相同数据类型的一个有序集合,属于构造类型,可以自己任意组合,并且结构体里也可以使用结构体类型作为成员。
DS小龙哥
2022/01/07
5130
微服务中能付出什么, 得到什么
这篇文章目的是强调,只有当我们付出足够的努力来处理我们将要面对的组织和分布式计算问题时,才能获得微服务并从中受益。在后面的段落中,您将发现我们从真正的微服务中得到了什么,以及它们从我们这里得到了什么。
程序你好
2018/07/20
4880
判断栈中str中的括号是否匹
4给定一个字符,怎么处理它 5如果这个字符串是左字符串,进栈; 6如果这个字符串是右括号,按照下面进行处理: 7如果栈为空,则不匹配,程序结束; 8出栈一个元素,记为y; 9如果x和y匹配,则继续; 10如果x和y不匹配,则当前字符串不匹配,程序结束; 11如果这个字符串x不是左右括号,则不匹配,程序结束 12当所有字符串都处理完成后,如果栈内还有元素,则不匹配,程序结束:
算法与编程之美
2023/09/18
1640
判断栈中str中的括号是否匹
JQuery中事件是否发生的判断
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_35512245/article/details/52916004
大黄大黄大黄
2018/09/14
1.4K0

相似问题

结构中的位是否保证是连续的?

113

是否保证memset会将结构中的填充位清零?

30

它是否保证“零”结构的填充位将在C中归零?

30

结构字段初始化的顺序是否在Rust中得到保证?

40

移动语义是否得到标准的保证?

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

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