小编lby*_*san的帖子

C中的重叠位域

我是计算机科学专业的学生。

现在,我正在用C进行计算机架构项目,该项目可模拟处理器。

有很多类型的指令,例如

 31     27 26     22 21     17 16                              0
 ---------------------------------------------------------------
|    op   |    ra   |    rb   |             imm17               |
 ---------------------------------------------------------------

 31     27 26     22 21     17 16                7 6 5 4       0
 ---------------------------------------------------------------
|    op   |    ra   |    rb   |       imm10       | m |  shamt  |
 ---------------------------------------------------------------

 31     27 26     22 21                                        0
 ---------------------------------------------------------------
|    op   |    ra   |                  imm22                    |
 ---------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

因此,我想制作一个C结构,其中包含与每个元素(例如op,ra等)相对应的位域。

起初,我认为我可以使用联合和嵌套结构。

例如,我编写了如下代码:

struct instr_t {
    union {
        uint32_t imm22 : 22;

        struct {
            union { …
Run Code Online (Sandbox Code Playgroud)

c struct unions bit-fields

4
推荐指数
2
解决办法
624
查看次数

C中位操作的奇怪行为

我正在学习C编程语言及其位运算符.我编写了如下代码,我预计代码的结果是相同的.但事实并非如此.

#include <stdio.h>
#define N 0

int main() {
    int n = 0;
    printf("%d\n", ~0x00 + (0x01 << (0x20 + (~n + 1))));
    printf("%d\n", ~0x00 + (0x01 << (0x20 + (~N + 1))));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我假设机器在32位上将数字表示为2的补码.它们都必须是-1,即所有位都是1,但第一个是0,第二个是-1.我认为除了使用变量或常量之外,两者都是完全相同的代码.

我在i5 CPU的Mac上使用gcc和-m32选项.

它出什么问题了?

谢谢.

c bit

1
推荐指数
2
解决办法
198
查看次数

标签 统计

c ×2

bit ×1

bit-fields ×1

struct ×1

unions ×1