You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++中如何通过指针修改全局bitset<32>变量?

解决bitset指针传递的赋值错误

你的代码编译错误核心是运算符优先级问题:[]的优先级高于*,导致*rd[i]被编译器解释为*(rd[i])——错误地把单个bitset变量的指针当成了bitset数组的指针,取数组第i个元素后再解引用,自然不符合语法要求。

错误代码片段

void LUI(bitset<32>*rd, int imm){
    bitset<32> temp(imm); 
    for(int i=31; i>=12; i--){
        *rd[i]=temp[i];
    }
    for(int i=11; i>=0; i--){
        *rd[i]=0; 
    }
}

修正后的代码

需要先对指针rd解引用得到bitset对象,再访问它的第i位,也就是用(*rd)[i]的写法:

#include<bits/stdc++.h>
using namespace std; 
bitset<32> zero(0); 
bitset<32> ra(0); 
bitset<32> sp; 
bitset<32> gp; 
bitset<32> tp(0); 
bitset<32> t0(0); 
bitset<32> t1(0); 

void LUI(bitset<32>* rd, int imm){
    bitset<32> temp(imm); 
    // 赋值高20位
    for(int i=31; i>=12; i--){
        (*rd)[i] = temp[i];
    }
    // 低12位置0
    for(int i=11; i>=0; i--){
        (*rd)[i] = 0; 
    }
}

// 调用示例
int main(){
    LUI(&t1, 0x123456); // 更新t1变量
    cout << t1.to_ulong() << endl;
    return 0;
}

更简洁的写法:用引用代替指针

你可以直接用bitset的引用作为函数参数,完全避免指针优先级的问题,代码可读性更强:

void LUI(bitset<32>& rd, int imm){
    bitset<32> temp(imm); 
    for(int i=31; i>=12; i--){
        rd[i] = temp[i];
    }
    for(int i=11; i>=0; i--){
        rd[i] = 0; 
    }
}

// 调用时直接传变量名
LUI(t1, 0x123456);

内容的提问来源于stack exchange,提问作者Hadj Ahmed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 06:12:43