我尝试设计一个程序,该程序将返回原始的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;
}
答案 0 :(得分:2)
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
&LT;&LT; - the bitwise shift
v = ( w |= 1 << i)
与v = ( w = w | 1 << i)
相同,因此意味着:v
等于(w
和OR
,1
移至i
,并将其分配给w
)
答案 1 :(得分:0)
在C ++中,[]
运算符用于string/array/vector/map/...
,但不适用于unsigned int
。
对于您的示例,您可能需要先将其更改为bit array
以便能够以这种方式使用。
答案 2 :(得分:0)
如果您有兴趣。
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
'答案。