我试图设计一个程序,它将返回原始32位值w
,但将数字i
元素更改为1
。这是我迄今为止获得的功能。但是对于这部分,v[i]=1;
,它只是表示对于i
表达式必须有指向对象类型的指针。错误:表达式必须具有指针对象类型
unsigned int setBit(unsigned int w,unsigned int i)
{
unsigned int v = w;
v[i]=1;
return v;
}
我试图设计一个程序,它将返回原始32位值w
,但将数字i
元素更改为1
。这是我迄今为止获得的功能。但是对于这部分,v[i]=1;
,它只是表示对于i
表达式必须有指向对象类型的指针。错误:表达式必须具有指针对象类型
unsigned int setBit(unsigned int w,unsigned int i)
{
unsigned int v = w;
v[i]=1;
return v;
}
unsigned int v = w;
v[i] = 1; // error, v is not an array
这是不正确的,因为v
不是一个数组。解决方案可能使用std::bitset
或者简单地移位并使用一些位操作 - 这会更快。
unsigned int setBit(unsigned int w,unsigned int i) {
unsigned int v = (w |= 1 << i);
return v;
}
用法:
int main(int argc, char *argv[])
{
unsigned int in = 0;
unsigned int res = setBit(in,1); // set 1st bit in 0 to 1, results in 2
return 0;
}
意义unsigned int v = (w |= 1 << i);
| - the bitwise OR
< < - the bitwise shift
v = (w |= 1 << i)
相同v = (w = w | 1 << i)
所以这意味着:v
等于(采取w
和OR
它与1
向左i
偏移,并且分配此给w
)
在C++中,操作者[]
为string/array/vector/map/...
,但不是一个unsigned int
。
对于您的示例,您可能需要首先将其更改为bit array
以便能够使用此类方式。
如果您有兴趣。
unsigned int setBit(unsigned int w, unsigned int i)
{
std::bitset<sizeof(unsigned int)> bitset((unsigned long long)w);
bs.set(i, 1);
(unsigned int)return bs.to_ulong();
}
虽然我仍然会用piotrus
的答案。
“| =”是什么意思?和它背后的“<<”。我真的只是C++的初学者。谢谢 – SYM2RR
| =是|的精简版和=,意思是“w | = 1”与w = w |意思相同1'。就像+ =。 –