我是计算机科学专业的学生。
现在,我正在用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编程语言及其位运算符.我编写了如下代码,我预计代码的结果是相同的.但事实并非如此.
#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选项.
它出什么问题了?
谢谢.