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
相关产品推荐
相关产品推荐

